OS X 沙盒问题

Posted

技术标签:

【中文标题】OS X 沙盒问题【英文标题】:OS X sandboxing questions 【发布时间】:2011-12-23 10:17:44 【问题描述】:

我在 App Store 中有一个 Mac 应用程序,我希望在沙盒成为强制性要求之前采用它。我遇到了两个问题,并希望在此处发布,以了解以下情况下的最佳实践:

在我的应用程序中,我使用 NSOpenPanel 提示用户加载专有文件格式。加载文件后,我的应用程序对其进行解析并将 NSURL 列表收集到本地文件。然后将这些本地文件传递给 NSImage 的 initWithContentsOfURL: 方法。不幸的是,加载图像文件的行为会导致沙箱取消该操作。我知道发生这种情况是因为用户已明确允许我的应用程序打开 NSOpenPanel 选择的文件,但不适用于我专有格式中引用的文件。我该如何处理这种(据说相当普遍)的情况? 我的应用程序包中包含一个 unix 可执行文件,我想使用 NSTask 执行该文件。鉴于脚本包含在我的包中,这在沙盒下是否合法?

如果有人能澄清以上几点,将不胜感激。

【问题讨论】:

【参考方案1】:

1) 据我了解,NSURL 对象包含稍后重新访问文件所需的权限,因此如果您使用硬编码路径,则可以将它们替换为存档的 NSURL 对象。这也是假设用户早先在 NSOpenPanel 中选择了这些文件。

2) 您可以运行 NSTask,但它会继承您的主应用程序的权限。

希望其他人可以提供更多信息。我发现 Mac Developer Boards,特别是“应用程序沙盒”论坛很有帮助,因为 Apple 员工经常会加入。到目前为止,我发现沙盒是一个无法使用的混乱。

【讨论】:

【参考方案2】:

简单的第一个:您可以使用 NSTask 运行您的助手,它将继承您应用的沙箱。

那些网址:不容易/可靠/根本。有一种方法可以将 NSURL 保存到您可以访问的文件中,这样您的应用程序的后续运行并重新加载它们并重新获得访问权限,然而它被认为是脆弱的,不推荐使用.阅读 Apple 开发者论坛,这是 Apple 承认的他们正在“解决”的问题;考虑到这一点,使用脆弱的解决方案可能不值得付出努力 - 如果您现在真的想破解某种可行的方法,请在开发者论坛中搜索脆弱的解决方案。

【讨论】:

以上是关于OS X 沙盒问题的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS Lion 和沙盒

限制(沙盒)node.js 文件访问

Paypal 沙盒 IPN 问题

Sonata 沙盒 2.3 安装失败

控制台未在 Apple 的快速启动中显示 Mac OS 应用沙箱违规

沙盒和App Group