我一直在寻找添加iTunes库访问我正在开发的Mac应用程序。
我查看了一些现有的开源实现,例如EyeTunes和iMedia - 但发现它们并不是我想要的。矫枉过正。
所以我尝试使用Scripting Bridge,发现虽然功能很慢。由于我并不真的需要控制iTunes,因此速度缓慢并不值得。它也有依赖iTunes运行的缺点。让它在沙盒应用程序中工作也有点恼人(虽然可能。)
所以我终于通过阅读iTunes Library.xml文件开始自己动手了。这似乎工作正常。但是在调查Distinguished Kind键/值的含义的过程中,我偶然发现了一个全新的,Apple提供了iTunesLibrary.framework !!!
美丽 - the iTunesLibrary framework docs are here.
但是,当我尝试使用参考链接中显示的代码初始化框架时:
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框架代码似乎不起作用。除非苹果公司修复它,否则这会成为一个交易破坏者。
答案 0 :(得分:6)
您需要使用Mac开发人员计划中的证书对您的应用进行协同设计。
在任何地方都没有记录,但是,我怀疑这个要求是因为iTunes云是一个需要访问用户帐户的Web服务而添加的。
// 修改:除了如上所述在项目设置中设置CODE_SIGN_IDENTITY
之外,您还需要将/Library/Frameworks
添加到FRAMEWORK_SEARCH_PATHS
中项目设置,以便Xcode知道在哪里寻找#import's。
// 编辑2 :我写了一个快速的小样本应用来展示iTunesLibrary的使用方式,因为Apple的示例代码和文档相当稀疏:https://github.com/zadr/iTunesLibraryExample
答案 1 :(得分:4)
来自iTunes Library Framework Reference
答案 2 :(得分:1)
不确定这对你们所有人是否属实,但在我的情况下,我保持代码签名身份-
帮助了我。现在我不需要签署该应用程序。