通过Mac App Store出售的应用程序是否可以访问系统文件夹?

我的意思是:我的应用程序需要读取沙箱区域之外的目录的内容,让我们说/Library/StartupItems之类的东西,如果用户愿意,可以在其中删除文件。

沙盒应用程序是否可以访问系统文件夹并在那里删除文件?如果无法删除,至少可以读取吗?

如果要在Mac App Store上销售,是否必须启用沙箱?

我已经尝试过随机执行此操作的目录:

  NSString *path = @"/Library/StartupItems";
  NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];

我可以获得目录 list 。如果该应用程序标记为沙盒,我该如何阅读?我不明白

最佳答案

不可以,通过Mac App Store出售的OS X应用程序无法按照您所描述的方式访问资源。还需要对所有应用进行沙盒测试并使用有效的Mac Developer Program证书进行代码签名。

至于当您的应用程序标记为“沙盒”时能够读取/Library/StartupItems(不建议使用);这不仅仅是检查选项的问题。您还必须确保选择了“使用权利文件”,并且应用程序已正确进行了代码签名。完成此操作后,您可以使用以下方法检查是否在Terminal中正确地将其沙箱化:

codesign -dvvv --entitlements :- Some.app/Contents/MacOS/Executable

此外,在某些目录中可以读取“世界可读”文件:
/bin
/sbin
/usr/bin
/usr/lib
/usr/sbin
/usr/share
/System

为了允许OS X应用程序像您的(较早的)示例那样与文件系统进行交互,该应用程序将需要使用通常使用Authorization Services的提升的特权-App Sandbox不允许这样做。看一下标题为“Determine Whether Your App Is Suitable for Sandboxing”的部分,它应该可以回答您可能遇到的其他问题。

沙盒在很多方面都很好,但同时也有很大的局限性。如果您的应用程序需要做的事情不在允许的范围之内,则可以选择不通过Mac App Store进行销售并且不使用沙箱。一些开发人员还创建了两个不同版本的应用程序(Mac App Store版本和非Mac App Store)。如果您的应用依赖于容器外的任何东西,那么您肯定会考虑/权衡沙盒的利与弊。
  • App Sandbox Guide
  • File System Programming Guide
  • Authorization Services C Reference
  • 关于macos - Mac App Store上出售的沙盒应用程序可以访问系统文件夹吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24594899/

    10-09 16:23