Как программно получить настройки iTunes, чтобы найти аудиобиблиотеки? - PullRequest
3 голосов
/ 16 января 2011

Я создаю приложение на Mac в Какао, которое воспроизводит аудио.Я думаю, что лучшее место для моего приложения для поиска аудиофайлов на компьютере пользователя - это получить путь к каталогам из iTunes.Как бы я получил пути к каталогам из iTunes?Будет ли это в какой-то настройке предпочтений?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 17 января 2011

Просто для тех, кто столкнется с этой проблемой в будущем, я задокументировал подход, который я использовал ниже.

Я решил не использовать карельский каркас, потому что мне не нужны все колокола исвистки.Мне просто нужно найти библиотеку iTunes и отобразить список песен.

Я прошел каркас Карелии, и оказалось, что они находят библиотеку iTunes через пользовательские настройки по умолчанию, как показано ниже.

+ (NSArray*) parserInstancesForMediaType:(NSString*)inMediaType
{
    NSMutableArray* parserInstances = [NSMutableArray array];

    if ([self isInstalled])
    {
        CFArrayRef recentLibraries = CFPreferencesCopyAppValue((CFStringRef)@"iTunesRecentDatabases",(CFStringRef)@"com.apple.iApps");
        NSArray* libraries = (NSArray*)recentLibraries;

        for (NSString* library in libraries)
        {
            NSURL* url = [NSURL URLWithString:library];
            NSString* path = [url path];
            BOOL changed;
            (void) [[NSFileManager imb_threadSafeManager] imb_fileExistsAtPath:&path wasChanged:&changed];

            NSString *libraryPath = [path stringByDeletingLastPathComponent];   // folder containing .xml file
            [IMBConfig registerLibraryPath:libraryPath];

            IMBiTunesParser* parser = [[[self class] alloc] initWithMediaType:inMediaType];
            parser.mediaSource = path;
            parser.shouldDisplayLibraryName = libraries.count > 1;
            [parserInstances addObject:parser];
            [parser release];
        }

        if (recentLibraries) CFRelease(recentLibraries);
    }

    return parserInstances;
}

Используя вышеуказанный подход, вы можете найти все библиотеки iTunes с помощьюследующий код.

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *userPref = [userDefaults persistentDomainForName:@"com.apple.iApps"];

NSArray *recentDatabases = [userPref objectForKey:@"iTunesRecentDatabases"];

for (NSString *key in recentDatabases)
{
    NSLog(@"%@", key);
}

Также, если вы проверяете пользовательский словарь iApps по умолчанию, вы можете использовать эти другие ключи для получения информации о других приложениях

iMovie
iPhotoAutoImportPath
iPhotoRecentDatabases
iTunesRecentDatabases
iTunesRecentDatabasePaths
3 голосов
/ 16 января 2011

Редактировать : Как уже отмечали другие, подход ниже не учитывает случай, когда библиотека iTunes может отсутствовать в домашней папке пользователя. См. Ответ Дэвида для лучшего решения. Поиск музыкальной папки пользователя все еще может быть несколько полезен для поиска стандартного (хотя и не единственного) местоположения аудиофайлов, отличных от iTunes (например, в качестве папки по умолчанию для открытой панели).

Оригинальный ответ :

Вы можете найти папку Музыка пользователя через

NSString *musicPath = [NSSearchPathForDirectoriesInDomains(NSMusicDirectory, NSUserDomainMask, YES) objectAtIndex:0];

Обычно в этом каталоге находится подкаталог iTunes, содержащий файл «iTunes Music Library.xml», который содержит большинство метаданных пользовательской библиотеки iTunes. Не пытайтесь писать в него - iTunes создает этот файл только для того, чтобы другие приложения могли получить к нему доступ, но не использует его внутри себя.

1 голос
/ 16 января 2011

Используйте Мост сценариев для общения с iTunes. Вы можете спросить iTunes о библиотеке пользователя и каждой дорожке в ней; дорожки файлов свободно сообщат вам, где они находятся в файловой системе.

В качестве альтернативы можно встроить каркас iMedia Browser от Karelia Software, который будет общаться с iTunes за вас.

Вы, вероятно, также должны иметь возможность открывать аудиофайлы, которые пользователь помещает в ваше приложение или назначает ему в окне «Информация» Finder и открывает. Попробуйте сделать ваше приложение основанным на документе ; в качестве альтернативы, реализуйте правильный метод делегата приложения и объявите правильные свойства Info.plist .

...