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

sck*_*kor 9 macos itunes objective-c itunes-sdk ituneslibrary

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

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

所以我尝试使用Scripting Bridge,发现虽然功能很慢.由于我并不真的需要控制iTunes,因此速度缓慢并不值得.它也有依赖iTunes运行的缺点.让它在沙盒应用程序中工作也有点恼火(虽然可能.)

所以我终于通过阅读iTunes Library.xml文件开始自己动手了.这似乎工作正常.但是在调查Distinguished Kind键/值的意义的过程中我偶然发现了一个全新的,Apple提供了iTunesLibrary.framework !!!

美丽 - iTunesLibrary框架文档在这里.

但是,当我尝试使用参考链接中显示的代码初始化框架时:

NSError * error = nil;
ITLibrary* library = [ITLibrary libraryWithAPIVersion:@"1.0" error:&error];
Run Code Online (Sandbox Code Playgroud)

它返回nil并提供非常有用的错误(在我的Sandboxed应用程序中):

错误域= NSPOSIXErrorDomain代码= 100001"无法加载".UserInfo = 0x1140025b0 {NSLocalizedDescription =无法加载.,NSUnderlyingError = 0x1026fbe20"操作无法完成.(OSStatus error -50.)"}

考虑到它可能是一个沙盒问题,我还创建了一个快速命令行实用程序,它尝试初始化库并返回一个几乎相同的错误:

无法打开库:错误域= NSPOSIXErrorDomain代码= 100001"无法加载".UserInfo = 0x1018015b0 {NSLocalizedDescription =无法加载.,NSUnderlyingError = 0x103a000e0"操作无法完成.(OSStatus错误100005.)"}

有没有其他人尝试过这个新的iTunes图书馆框架,而不是我的运气?

//编辑:下面的答案是正确的.代码签名是必需的.答案中的示例代码是使用框架的便捷起点.此外,在我的情况下,问题还在于当iTunes库托管在网络驱动器上时,iTunesLibrary框架代码似乎不起作用.除非苹果公司修复它,否则这会成为一个交易破坏者.

zad*_*adr 7

您需要使用Mac Developer Program中的证书对您的应用进行协同设计.

它没有记录在任何地方,但是,我怀疑是由于iTunes云是一个需要访问用户帐户的Web服务的东西而增加了这个要求.

// 编辑:除了CODE_SIGN_IDENTITY如上所述设置项目设置外,还需要在项目设置中添加/Library/Frameworks,FRAMEWORK_SEARCH_PATHS以便Xcode知道在哪里查找#imports.

// 编辑2:我写了一个快速的小样本应用程序,以显示如何使用iTunesLibrary,因为Apple的示例代码和文档相当稀疏:https://github.com/zadr/iTunesLibraryExample

  • 在我看来,不仅签名,一般沙盒,并将框架添加到搜索部分是必不可少的,您还需要明确允许通过`com.apple.security.assets.movi​​es.read-only访问音乐和电影.和权利中的`com.apple.security.assets.music.read-only`.喜欢[so](https://github.com/zadr/iTunesLibraryExample/blob/master/iTunesLibraryExample.entitlements). (5认同)