我的程序使电台自动化。它和iTunes之间有很多来回的交流。我用脚本桥编写的。脚本桥受到内存泄漏的影响。每次对脚本桥的调用都会泄漏少量内存。向一个全天候运行的程序添加大量调用,我得到的软件将运行不到24小时,然后退出。
我的第一个解决方案是尽量减少对脚本桥的调用。在研究这一点的过程中,我遇到了ItunesLibrary。这对我不起作用。
NSError *error = nil;
ITLibrary *library = [ITLibrary libraryWithAPIVersion:@"1.0" error:&error];
if (library)
{
NSArray *playlists = [[NSArray alloc]init];
playlists = library.allPlaylists;
NSArray *tracks = [[NSArray alloc]init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mediaKind == %d", ITLibMediaItemMediaKindSong];
tracks = [library.allMediaItems filteredArrayUsingPredicate:predicate];
NSLog(@"Playlists - %@",playlists);
NSLog(@"Tracks - %@",tracks);
}这段代码几乎就出自苹果的文档。它应该行得通--我想。
在添加谓词之前,我获得了有关iTunes库中每个播客的一些信息。在nslog输出中,我的每个播放列表都会生成一个类似于"“的条目。我的每首歌都只显示(null)。
所有信息都在iTunes中。我可以用脚本桥来读它。我可以用AVAsset来读
AVAsset *asset = [AVURLAsset URLAssetWithURL:myUrl options:nil];
NSArray *metadata = [asset commonMetadata];
for ( AVMetadataItem* item in metadata )
{
NSString *key = [item commonKey];
NSString *value = [item stringValue];
NSLog(@"key = %@, value = %@", key, value);
}对于AVAsset,我只能得到歌曲名称、专辑名称和艺术家名称。我需要访问iTune的其余ID3标签。
我该怎么做才能破坏ItunesLibrary?
发布于 2018-01-17 02:32:08
让ItunesLibrary正常工作的秘密似乎就在授权文件中。您需要添加key "com.apple.security.assets.music.read-only",并设置为YES。这是我通过在github.com上挖掘一个项目得到的。
https://stackoverflow.com/questions/48039127
复制相似问题