Mac App Store出售的沙盒应用程序能够访问系统文件夹吗?

8

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

我的意思是:我的应用程序需要读取位于沙盒区域之外的目录内容,比如说像 /Library/StartupItems 这样的目录,并且如果用户需要的话可能会删除其中的文件。

一个被沙盒化的应用程序是否可以访问系统文件夹并删除其中的文件呢?如果不能删除,那么至少可以读取吗?

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

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

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

我可以获取目录列表。但是,如果应用程序被标记为沙箱环境,我怎么能读取它呢?我不明白。

1个回答

5
不,通过Mac App Store销售的OS X应用程序不能以您描述的方式访问资源。同时,所有应用程序必须使用有效的Mac开发人员计划证书进行代码签名,并进行沙箱化处理。
至于在将您的应用程序标记为“沙盒化”时能否读取/Library/StartupItems(已弃用),这不仅仅是勾选选项的问题。您还需要确保选择“使用授权文件”,并正确对应用程序进行代码签名。完成后,您可以使用终端检查验证其是否已正确沙盒化:
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不允许的。请查看标题为“确定您的应用程序是否适合使用沙盒技术”的部分,它应该能够回答您可能有的其他问题。
沙盒技术在很多方面都很好,但同时也非常限制。如果您的应用程序需要执行不在允许范围内的操作,您可以选择不通过Mac App Store销售并且不使用沙盒技术。一些开发人员还创建了两个不同版本的应用程序(Mac App Store版本和非Mac App Store版本)。如果您的应用程序依赖于超出其容器范围的任何事情,您肯定需要考虑/权衡沙盒技术的利弊。

谢谢你的回答,但你提到沙盒作为一个选项。如果我想在应用商店上销售它,那就不是一个选项了,对吧?我的意思是,如果通过应用商店销售,苹果强制所有应用都必须使用沙盒技术,对吧? - Duck
2
正确。如果您希望在 Mac App Store 之外销售应用程序,则使用 App Sandbox 只是可选的。 - l'L'l
我一直怀疑这件事。谢谢。 - Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接