使用Sandbox打开文件

时间:2013-03-01 10:23:33

标签: objective-c cocoa sandbox

好的,所以我知道根据新的 SandBox 指南,打开文件必须遵守某些规则(也就是说,开放操作必须由用户使用NSOpenPanel触发,给定当然必要的“开放”权限。

但是,这里有一个问题:

  • 在我的应用程序中,我有一个NSOutlineView,里面有一个完整的文件管理器(完整的树结构)
  • 用户应该能够从大纲视图中选择一个文件,然后应用程序就会打开它。

我应该如何做到这一点,因为应用程序应该100%符合沙箱标准?有没有已知的解决方法?它甚至可能吗?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

简短回答:你做不到。为了在应用的UI中显示文件夹的内容,您首先必须让用户使用打开的面板或从Finder中拖入它来打开它。

答案 1 :(得分:0)

您可以这样做,正如@omz所说,您的应用程序需要请求访问包含您的应用程序所显示的所有文件/文件夹的文件夹的权限。您不需要单个文件的权限,但可以将整个目录结构作为单个权限获取,然后将其存储为安全范围的书签,以便将来执行您的应用程序时已具有该权限。

您甚至可以在应用启动时询问用户是否有权访问整个硬盘或整个用户目录。

您可以使用我编写的这个类将所有内容包装到单个函数调用中,然后将保留权限,以便在首次运行时询问它们。 https://github.com/leighmcculloch/AppSandboxFileAccess

或者,如果您想手动使用NSOpenPanel,只需查看AppSandboxFileAccess中的代码,因为它使用它来获取权限,然后保留这些权限。