在Mac OSX Sandbox中读取文件

时间:2015-02-03 06:00:23

标签: objective-c macos finder appstore-sandbox

我正在尝试在应用程序沙箱外部以沙盒模式读取文件。我浏览了这篇objColumnist帖子,肯定是Apple App Sandbox Design Guide documentation

文档明确指出您需要NSOpenPanelNSSavePanel来读取/写入Security-Scoped Bookmarks中的文件。

  

如果您的应用使用了应用容器外部的下载或处理文件夹,请通过显示NSOpenPanel对话框获取初始访问权限,以获取用户使用特定文件夹的意图

我的用例有点不同,我想从finder中读取一个文件。就像当用户从finder触发一些热键时,我将从finder中获取选择(使用脚本桥来获取文件选择),然后读取该文件。因此我无法创建Security-Scoped Bookmarks

有没有另一种方法来读取书签文件。或者除了脚本桥之外还有其他方式来获取适合app沙箱的查找器选择。

2 个答案:

答案 0 :(得分:1)

有一种方法可以完成这项工作:使用NSService在Finder中发布文件服务>服务菜单 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/SysServices/Articles/overview.html#//apple_ref/doc/uid/20000850-BCIDHJJA

用户在Finder中选择一个文件,通过上下文菜单,快捷方式/热键或Finder菜单调用服务。您将收到一个安全范围的书签,然后您可以在该书签上访问该文件。

Apple App Store中不允许使用AppleScript,因为您无法获得脚本Finder的权利。

答案 1 :(得分:0)

除下载,图片,电影和音乐外,您无需用户同意阅读文件。

您的应用可以使用UTI注册读取某些类型的文件,然后您可以实施相应的应用委托方法来打开用户在Finder中双击的文件。就像用户双击页面文档时页面的打开方式一样。

除此之外,(除非您不使用沙盒),出于安全考虑,您的应用受到限制。通过沙箱的唯一方法是使用powerbox,它由NSOpenPanel和NSSavePanel透明地处理,开发人员无法直接访问。