我正在尝试在应用程序沙箱外部以沙盒模式读取文件。我浏览了这篇objColumnist帖子,肯定是Apple App Sandbox Design Guide
documentation。
文档明确指出您需要NSOpenPanel
或NSSavePanel
来读取/写入Security-Scoped Bookmarks
中的文件。
如果您的应用使用了应用容器外部的下载或处理文件夹,请通过显示NSOpenPanel对话框获取初始访问权限,以获取用户使用特定文件夹的意图
我的用例有点不同,我想从finder中读取一个文件。就像当用户从finder触发一些热键时,我将从finder中获取选择(使用脚本桥来获取文件选择),然后读取该文件。因此我无法创建Security-Scoped Bookmarks
。
有没有另一种方法来读取书签文件。或者除了脚本桥之外还有其他方式来获取适合app沙箱的查找器选择。
答案 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透明地处理,开发人员无法直接访问。