我一直在考虑将 iTunes 库访问权限添加到我正在开发的 Mac 应用程序中。
我查看了一些现有的开源实现,例如EyeTunes和iMedia,但发现它们并不是我想要的。总体来说是矫枉过正。
所以我尝试使用Scripting Bridge,发现虽然功能很慢。而且由于我真的不需要控制 iTunes,所以运行缓慢是不值得的。它也有依赖 iTunes 运行的缺点。让它在沙盒应用程序中工作也有点烦人(尽管可能。)
所以我终于通过阅读 iTunes Library.xml 文件开始自己动手了。这似乎工作正常。但是在调查 Distinguished Kind 键/值的含义的过程中,我偶然发现了一个全新的 Apple 提供的 iTunesLibrary.framework !!!
但是,当我尝试使用参考链接中所示的代码初始化框架时:
NSError * error = nil;
ITLibrary* library = [ITLibrary libraryWithAPIVersion:@"1.0" error:&error];
它返回 nil 并提供非常有用的错误(在我的沙盒应用程序中):
错误域 = NSPOSIXErrorDomain 代码 = 100001 “无法加载。” UserInfo=0x1140025b0 {NSLocalizedDescription=无法加载。,NSUnderlyingError=0x1026fbe20“操作无法完成。(OSStatus错误-50。)”}
认为这可能是沙盒问题,我还创建了一个快速命令行实用程序,它尝试初始化库并返回几乎相同的错误:
无法打开库:错误域 = NSPOSIXErrorDomain 代码 = 100001 “无法加载。” UserInfo=0x1018015b0 {NSLocalizedDescription=无法加载。,NSUnderlyingError=0x103a000e0“操作无法完成。(OSStatus 错误 100005。)”}
有没有其他人比我更幸运地尝试过这个新的 iTunes 库框架?
// 编辑:下面的答案是正确的。需要代码签名。答案中的示例代码是使用该框架的便捷起点。此外,在我的情况下,问题还在于当 iTunes 库托管在网络驱动器上时,iTunesLibrary 框架代码似乎不起作用。除非Apple修复它,否则这有点破坏交易。