使用新的iTunesLibrary Framework访问Mac OS-X上的iTunes库

时间:2013-05-16 20:54:17

标签: objective-c macos itunes itunes-sdk ituneslibrary

我一直在寻找添加iTunes库访问我正在开发的Mac应用程序。

我查看了一些现有的开源实现,例如EyeTunesiMedia - 但发现它们并不是我想要的。矫枉过正。

所以我尝试使用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框架代码似乎不起作用。除非苹果公司修复它,否则这会成为一个交易破坏者。

3 个答案:

答案 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

  • 您必须对您的应用进行代码签名,以便从中获取信息 iTunes Library框架。
  • iTunes Library框架可供运行iTunes的用户使用 v11.0或以上。

答案 2 :(得分:1)

不确定这对你们所有人是否属实,但在我的情况下,我保持代码签名身份-帮助了我。现在我不需要签署该应用程序。