是否可以在没有文件浏览器对话的情况下访问Mac App中的文件系统

时间:2016-04-04 08:49:47

标签: macos mac-app-store read-write entitlements

在我们的Mac应用程序中,我们拥有以下凭据到entitlement.plist,这使我们能够读/写用户的文件系统,然后进行文件浏览器对话:

com.apple.security.files.user-selected.read-write

这意味着我们能够在文件浏览器对话访问后读/写文件/文件夹。如果在应用程序生命周期中至少没有一次文件浏览器对话访问,我们就无法读取/写入文件/文件夹。

我没有找到任何其他可能的凭证,即entitlement.plist,它可以通过完全删除文件浏览器对话的任何使用来启用我们对文件/文件夹的读/写。有什么方法可以实现这个目标吗?

2 个答案:

答案 0 :(得分:4)

我认为您的应用是Sandboxed,如果是,则只能按照定义here访问文件系统:

  

您的容器外的Powerbox和文件系统访问

     

沙盒应用可以访问其外部的文件系统位置   容器有以下三种方式:

     
      
  • 在用户的特定方向
  •   
  • 使用权利   特定文件系统位置(在Entitlements and System Resource Access中描述)
  •   
  • 当文件系统位置确定时   世界可读的目录
  •   
     

与用户交互以扩展沙箱的OS X安全技术称为Powerbox。 Powerbox没有API。当您使用NSOpenPanelNSSavePanel类时,您的应用会透明地使用Powerbox。

答案 1 :(得分:1)

好吧,Sandboxing的重点是实际上不允许您在他们不知情的情况下访问用户的文件。

您唯一可以做的就是使用com.apple.security.temporary-exception.files.absolute-path.*权利来访问某些特定的(读取硬编码)文件系统位置。您可以在此处了解有关临时例外的更多信息:App Sandbox Temporary Exception Entitlements

但请记住,您必须向Apple Review Team解释为什么您首先需要这些例外。