使用Scripting Bridge和iTunes编写的iTunes脚本沙箱

时间:2013-05-07 13:18:26

标签: objective-c macos cocoa itunes appstore-sandbox

我有一个应用程序告诉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'但没有找到 - 它不在那里)所以我不能确认我是否还需要。

总结一下,为什么沙箱会阻止它工作?

1 个答案:

答案 0 :(得分:0)

没关系。事实证明我在filteredArrayUsingPredicate:上调用了SBElementArray来查找我想要播放的曲目,并且某种程度上搞砸了。现在我使用方法objectWithName:并且它可以工作。