是否可以授予沙盒应用访问AppleScript发送的文件的权限?

时间:2015-01-26 17:31:38

标签: macos scripting applescript appstore-sandbox

我正在为我的沙盒Mac App Store应用添加AppleScript支持。我希望用户能够通过脚本使用我编写的命令将文件添加到应用程序,如下所示:

add file at path "/path/to/some/file/on.disk"

我将命令的参数指定为file类型,因此它作为NSURL传到我的应用中,我可以看到文件网址的路径(po url.path)调试器。

这是sdef文件中命令的定义:

<!-- Contained by a suite -->
<command name="add file at path" code="ABCDABCD">
    <direct-parameter description="A file to add to the app" type="file" />
</command>

当我尝试为此文件创建安全范围的书签时,出现错误:

  

无法打开()项目

我需要能够在应用程序的后续启动时读取该文件,这就是我创建书签的原因。这个书签创建代码:

NSData *fileBookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                     includingResourceValuesForKeys:nil
                                      relativeToURL:nil
                                              error:&error];

我尝试用[url start(stop)AccessingSecurityScopedResource]包围代码,这没有什么区别。

更新

我还确定该应用无法读取该文件的内容,或将其复制到应用的容器中。除了路径之外,脚本应用程序对文件具有 no 访问权限。

更新2

我还尝试将脚本放在~/Application Scripts/bundleidNSApplicationScriptsDirectory)目录中,并从我的Cocoa代码中的NSUserScriptTask运行它,并产生相同的结果(文件位于URL仍然无法读取。)

1 个答案:

答案 0 :(得分:3)

嗯,事实证明问题与我的应用程序无关,而是与我用来调用它的AppleScript有关。您需要发送文件句柄或别名,如下所示:

add file at path posix file "/path/to/some/file/on.disk"
add file at path "path:to:some:file:on.disk" as alias

当你提供一条路径(POSIX或其他方式)时,它仍以NSURL形式出现,因此我感到困惑,但没有在沙箱中打洞。

此行为不明显,难以排除故障,因此我filed a Radar