我一直在考虑在我正在开发的Mac应用程序中添加iTunes Library访问权限。
我查看了一些现有的开源实现,如EyeTunes和iMedia,但发现它们并不完全是我想要的。
所以我尝试使用脚本桥,并发现,虽然功能是缓慢的。而且由于我并不真的需要控制iTunes,所以速度慢是不值得的。它也有依赖iTunes运行的缺点。让它在沙盒应用程序中工作也有点令人恼火(尽管可能)。
所以我终于开始自己滚动阅读iTunes Library.xml文件。看起来还行。但是在调查Distinguished Kind键/值的含义的过程中,我偶然发现了一个全新的,苹果提供的ituneslibrary .框架!!
Beautiful - iTunesLibrary框架文档在这里。
但是,当我尝试使用参考链接中所示的代码初始化框架时:
NSError * error = nil;
ITLibrary* library = [ITLibrary libraryWithAPIVersion:@"1.0" error:&error];
它返回nil并提供非常有用的错误,像这样(在我的沙盒应用程序):
错误域=NSPOSIXErrorDomain Code=100001 "Could not load."UserInfo=0x1140025b0 {NSLocalizedDescription=无法加载。NSUnderlyingError=0x1026fbe20 "操作无法完成。"(OSStatus错误-50.)"}
考虑到这可能是沙盒问题,我还创建了一个快速命令行实用程序,试图初始化库,它返回一个几乎相同的错误:
Failed to open library: ErrorDomain =NSPOSIXErrorDomain Code=100001"无法加载。"用户信息= 0 x1018015b0 {NSLocalizedDescription =不加载。, NSUnderlyingError=0x103a000e0 "此操作无法执行完成。(OSStatus error 100005.)"}
还有人比我更幸运地尝试了这个新的iTunes Library框架吗?
//EDIT:以下答案是正确的。代码签名是必需的。答案中的示例代码是使用该框架的一个方便的起点。此外,在我的情况下,问题还在于当iTunes库托管在网络驱动器上时,iTunesLibrary框架代码似乎无法工作。除非苹果公司能解决这个问题,否则这就有点不太好了。
你需要使用Mac Developer Program的证书来共同设计你的应用程序。
没有在任何地方记录,但是,我怀疑这个要求是由于iTunes云是一个需要访问用户帐户的web服务而添加的。
//Edit:除了如上所述在项目设置中设置CODE_SIGN_IDENTITY
之外,您还需要在项目设置中将/Library/Frameworks
添加到FRAMEWORK_SEARCH_PATHS
中,以便Xcode知道在哪里查找#import's。
//编辑2:我写了一个快速的小示例应用程序来展示如何使用iTunesLibrary,因为苹果的示例代码和文档相当稀疏:https://github.com/zadr/iTunesLibraryExample
From iTunes Library Framework Reference
- 你必须对你的应用进行代码签名,以便从iTunes库框架。
- iTunes Library框架可供运行iTunes的用户使用v11.0或以上版本
不确定这是否适用于所有人,但在我的情况下,我将代码签名身份保留到-
帮助了我。现在我不需要为应用程序签名了