Sandbox通过NSAppleScript授权脚本iTunes

时间:2015-12-06 15:25:31

标签: swift cocoa applescript appstore-sandbox nsapplescript

我试图在我的Cocoa应用程序中从NSAppleScript编写iTunes脚本,以便将文件添加到库中。

在我的权利文件中,我添加了以下内容:

<key>com.apple.security.scripting-targets</key>
    <dict>
        <key>com.apple.itunes</key>
        <array>
            <string>com.apple.itunes.library.read-write</string>
        </array>
    </dict>

然后我像这样调用AppleScript:

var error: NSDictionary? = nil
let appleScript = NSAppleScript(source: "tell application \"iTunes\" to add (POSIX file \"\(path)\") to library playlist 1")
let result = appleScript?.executeAndReturnError(&error)

但失败并显示错误-10004iTunes got an error: A privilege violation occurred.

我尝试了两种方式(itunesiTunes)使用iTunes,但似乎没有任何效果。我还尝试在读写权利之上添加read权利。最后,我尝试添加对用户音乐文件夹(存储iTunes资料库的位置)的读写访问权限,这也没有帮助。

是否还有其他必需的权利,我不知道为了编写iTunes脚本?

我在搜索解决方案(link)时发现此链接,但它要求用户在其Library文件夹中选择一个特定文件夹,以便为应用程序提供用户选择的文件访问权限,然后要求脚本在一个单独的文件中,这对于我想要做的事情来说太多了。我不相信用户有关脚本文件的管理,我不需要1行AppleScript代码的文件。我理解NSUserAppleScriptTask的另一个缺点是,您无法在多个调用中保持脚本的状态,这在我的情况下不是问题,但可能适用于其他人。

由于

1 个答案:

答案 0 :(得分:2)

在联系Apple的开发者技术支持后,我能够解决这个问题,实际上是一个问题。

首先,权利需要正确套装捆绑标识符。对于iTu​​nes,权利必须如下(注意iTunes中的大写T):

<key>com.apple.security.scripting-targets</key>
<dict>
    <key>com.apple.iTunes</key>
    <array>
        <string>com.apple.iTunes.library.read-write</string>
    </array>
</dict>

然后,除非AppleScript代码最后包含of source 1,否则将发生权限违规:

tell application "iTunes" to add (POSIX file "your/path/to/mp3.mp3") to library playlist 1 of source 1

你去吧!