在我们的Mac应用程序中,我们拥有以下凭据到entitlement.plist,这使我们能够读/写用户的文件系统,然后进行文件浏览器对话:
com.apple.security.files.user-selected.read-write
这意味着我们能够在文件浏览器对话访问后读/写文件/文件夹。如果在应用程序生命周期中至少没有一次文件浏览器对话访问,我们就无法读取/写入文件/文件夹。
我没有找到任何其他可能的凭证,即entitlement.plist,它可以通过完全删除文件浏览器对话的任何使用来启用我们对文件/文件夹的读/写。有什么方法可以实现这个目标吗?
答案 0 :(得分:4)
我认为您的应用是Sandboxed,如果是,则只能按照定义here访问文件系统:
您的容器外的Powerbox和文件系统访问
沙盒应用可以访问其外部的文件系统位置 容器有以下三种方式:
- 在用户的特定方向
- 使用权利 特定文件系统位置(在Entitlements and System Resource Access中描述)
- 当文件系统位置确定时 世界可读的目录
与用户交互以扩展沙箱的OS X安全技术称为Powerbox。 Powerbox没有API。当您使用
NSOpenPanel
和NSSavePanel
类时,您的应用会透明地使用Powerbox。
答案 1 :(得分:1)
好吧,Sandboxing的重点是实际上不允许您在他们不知情的情况下访问用户的文件。
您唯一可以做的就是使用com.apple.security.temporary-exception.files.absolute-path.*
权利来访问某些特定的(读取硬编码)文件系统位置。您可以在此处了解有关临时例外的更多信息:App Sandbox Temporary Exception Entitlements。
但请记住,您必须向Apple Review Team解释为什么您首先需要这些例外。