【问题标题】:Can a sandboxed app sold on the Mac App Store access system folders?Mac App Store 上出售的沙盒应用程序可以访问系统文件夹吗?
【发布时间】:2014-07-07 11:20:53
【问题描述】:

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

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

沙盒应用是否可以访问系统文件夹并删除其中的文件?如果不能删除,至少还能读吗?

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

我随机尝试了一个目录:

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

我可以得到目录列表。如果应用程序被标记为沙盒,我该如何阅读?没看懂。

【问题讨论】:

    标签: macos cocoa sandbox appstore-sandbox


    【解决方案1】:

    不,通过 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 不允许的。查看标题为“Determine Whether Your App Is Suitable for Sandboxing”的部分,它应该回答您可能遇到的任何其他问题。

    沙盒在很多方面都很好,但同时也很受限制。如果您的应用需要做的事情不在允许的范围内,您可以选择不通过 Mac App Store 销售,也不使用沙盒。一些开发人员还创建了两个不同版本的应用程序(Mac App Store 版本和非 Mac App Store)。如果您的应用依赖于其容器之外的大部分内容,您肯定会考虑/权衡沙盒的利弊。

    【讨论】:

    • 感谢您的回答,但您将沙盒作为一种选择。如果我想在应用商店出售它不是一个选择,对吧?我的意思是,如果通过应用商店出售所有应用,Apple 会强制所有应用都被沙盒化,对吧?
    • 正确。仅当您希望在 Mac App Store 之外销售 App Sandbox 时,才可选择使用 App Sandbox。
    • 我怀疑。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2015-09-25
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多