可以在Mac App Store上销售的沙盒应用程序访问系统文件夹吗?

时间:2014-07-06 10:31:16

标签: macos cocoa sandbox appstore-sandbox

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

我的意思是:我的应用程序需要读取沙箱区域之外的目录内容,让我们说/Library/StartupItems之类的内容,如果用户需要,可能会删除那里的文件。

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

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

我已经随机尝试了一个目录:

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

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

1 个答案:

答案 0 :(得分:4)

不,通过Mac App Store销售的OS X应用程序无法以您所描述的方式访问资源。它还要求所有应用程序都使用有效的Mac开发人员计划证书进行沙盒化和编码。

当您的应用被标记为&#34时,能够阅读/Library/StartupItems(已弃用);沙盒&#34 ;;它不仅仅是检查选项的问题。您还必须确保选中“使用权利文件”,并且应用程序已正确编码。完成后,您可以通过以下方式检查以验证它是否已在终端中正确沙盒化:

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

此外,某些目录中的文件是“世界可读的”#34;可以阅读:

/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)。如果你的应用程序依赖于它的容器以外的任何东西你绝对想要考虑/权衡沙盒的利弊。