Просто для тех, кто столкнется с этой проблемой в будущем, я задокументировал подход, который я использовал ниже.
Я решил не использовать карельский каркас, потому что мне не нужны все колокола исвистки.Мне просто нужно найти библиотеку 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