好的,所以我知道在新的沙盒指南下,打开文件必须遵守某些规则(也就是打开操作必须由用户使用 触发NSOpenPanel
,当然要考虑必要的“打开”权限)。
但是,这里有一个问题:
- 在我的应用程序中,我有
NSOutlineView
一个完整的文件管理器(完整的树结构) - 用户应该能够从大纲视图中选择一个文件,然后应用程序将打开它。
鉴于应用程序应该 100% 兼容沙盒,我应该怎么做?有什么已知的解决方法吗?甚至可能吗?
有任何想法吗?
好的,所以我知道在新的沙盒指南下,打开文件必须遵守某些规则(也就是打开操作必须由用户使用 触发NSOpenPanel
,当然要考虑必要的“打开”权限)。
但是,这里有一个问题:
NSOutlineView
一个完整的文件管理器(完整的树结构)鉴于应用程序应该 100% 兼容沙盒,我应该怎么做?有什么已知的解决方法吗?甚至可能吗?
有任何想法吗?
简短的回答:你不能那样做。为了在应用程序的 UI 中显示文件夹的内容,您首先必须让用户使用打开的面板或从 Finder 中将其拖入来打开它。
正如@omz 所说,您可以这样做,您的应用程序需要请求访问包含您的应用程序显示的所有文件/文件夹的文件夹的权限。您不需要单个文件的权限,但可以将整个目录结构作为单个权限获取,然后将其存储为安全范围的书签,以便您的应用程序的未来执行将已经拥有该权限。
您甚至可以在应用程序启动时询问用户访问整个硬盘驱动器或其整个用户目录的权限。
您可以使用我编写的这个类将所有这些包装到一个函数调用中,然后将保留权限,以便仅在第一次运行时询问它们。https://github.com/leighmcculloch/AppSandboxFileAccess
或者,如果您想手动使用 NSOpenPanel 执行此操作,只需查看AppSandboxFileAccess中的代码,因为它使用它来获取权限,然后保留这些权限。