是否可以授予沙盒应用程序访问从 AppleScript 发送的文件的权限?
Is it possible to grant a sandboxed app access to a file sent from an AppleScript?
我正在为我的沙盒 Mac App Store 应用添加 AppleScript 支持。我希望用户能够使用我编写的命令通过脚本将文件添加到应用程序,如下所示:
add file at path "/path/to/some/file/on.disk"
我将命令的参数指定为 file
类型,因此它以 NSURL
的形式传到我的应用程序中,我可以看到文件 URL 的路径( 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>
当我尝试为此文件创建安全范围的书签时,出现错误:
Could not open() the item
我需要能够在应用程序的后续启动时读取该文件,这就是我创建书签的原因。此书签创建代码:
NSData *fileBookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
我尝试用 [url start(stop)AccessingSecurityScopedResource]
围绕代码,但没有任何区别。
更新
我还确定该应用无法读取文件内容,或无法将其复制到应用的容器中。脚本化应用程序 没有 访问该文件的权限,除了它的路径。
更新 2
我还尝试将脚本放在 ~/Application Scripts/bundleid
(NSApplicationScriptsDirectory
) 目录中,然后 运行 它来自我的 Cocoa 代码中的 NSUserScriptTask
,并且产生了相同的结果(URL 处的文件仍然不可读)。
好吧,事实证明问题与我的应用程序无关,而是与我用来调用它的 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。
我正在为我的沙盒 Mac App Store 应用添加 AppleScript 支持。我希望用户能够使用我编写的命令通过脚本将文件添加到应用程序,如下所示:
add file at path "/path/to/some/file/on.disk"
我将命令的参数指定为 file
类型,因此它以 NSURL
的形式传到我的应用程序中,我可以看到文件 URL 的路径( 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>
当我尝试为此文件创建安全范围的书签时,出现错误:
Could not open() the item
我需要能够在应用程序的后续启动时读取该文件,这就是我创建书签的原因。此书签创建代码:
NSData *fileBookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
我尝试用 [url start(stop)AccessingSecurityScopedResource]
围绕代码,但没有任何区别。
更新
我还确定该应用无法读取文件内容,或无法将其复制到应用的容器中。脚本化应用程序 没有 访问该文件的权限,除了它的路径。
更新 2
我还尝试将脚本放在 ~/Application Scripts/bundleid
(NSApplicationScriptsDirectory
) 目录中,然后 运行 它来自我的 Cocoa 代码中的 NSUserScriptTask
,并且产生了相同的结果(URL 处的文件仍然不可读)。
好吧,事实证明问题与我的应用程序无关,而是与我用来调用它的 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。