如何以编程方式检索iTunes首选项以查找音频库?

Dav*_*vid 3 audio macos cocoa itunes

我正在使用Cocoa在Mac上创建一个播放音频的应用程序.我认为我的应用程序在用户计算机上搜索音频文件的最佳位置是从iTunes获取目录路径.如何从iTunes中检索目录路径?这会是某种偏好设置吗?

谢谢.

Dav*_*vid 7

对于那些将来会遇到这个问题的人,我已经记录了我在下面使用的方法.

我决定不使用卡累利阿框架,因为我不需要所有的花里胡哨.我只需要找到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;
}
Run Code Online (Sandbox Code Playgroud)

使用上述方法,您可以使用以下代码找到所有iTunes库.

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

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

for (NSString *key in recentDatabases)
{
    NSLog(@"%@", key);
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您检查用户默认的iApps字典,您可以使用这些其他键来获取其他应用程序的信息

iMovie
iPhotoAutoImportPath
iPhotoRecentDatabases
iTunesRecentDatabases
iTunesRecentDatabasePaths
Run Code Online (Sandbox Code Playgroud)