我有一个应用程序告诉iTunes使用ScriptingBridge框架播放音乐。该应用程序要么告诉iTunes播放播放列表或某个曲目。该应用程序也是沙盒。
播放播放列表,这就是我的内容:
iTunesPlaylist* playlist = ...
[playlist playOnce: YES];
要播放曲目,它也非常简单:
iTunesTrack* track = ...
[track playOnce: YES];
由于我的应用是沙箱,我的权利文件中有以下几行:
<key>com.apple.security.scripting-targets</key>
<dict>
<key>com.apple.iTunes</key>
<array>
<string>com.apple.iTunes.library.read</string> // I also have this to read the playlists/tracks the user has on his library
<string>com.apple.iTunes.playback</string>
</array>
</dict>
我测试时没有应用沙盒,代码运行完美。使用沙盒虽然播放列表代码工作正常,但播放曲目不工作。我查看了Console应用程序,似乎没有记录任何涉及sandboxd和我的应用程序。
起初我以为我可能在我的权利文件中遗漏了一些access-group
,但后来我认为这没有意义,因为我已经拥有playback
。我在网上找不到iTunes的任何访问组列表(我甚至尝试使用sdef从iTunes获取属性列表并搜索'access-group'但没有找到 - 它不在那里)所以我不能确认我是否还需要。
总结一下,为什么沙箱会阻止它工作?
答案 0 :(得分:0)
没关系。事实证明我在filteredArrayUsingPredicate:
上调用了SBElementArray
来查找我想要播放的曲目,并且某种程度上搞砸了。现在我使用方法objectWithName:
并且它可以工作。