OS X沙盒问题

时间:2011-12-23 10:17:44

标签: macos cocoa sandbox

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

这些网址:不容易/可靠/根本不存在。有一种方法可以将NSURL保存到您有权访问的文件,以便随后运行您的应用程序并重新加载它们并重新获得访问权限,然而它被认为是脆弱的,不建议使用。阅读Apple开发人员论坛,这是Apple承认他们“正在努力”的问题;鉴于使用脆弱的解决方案可能不值得努力 - 如果你真的想要破解现在有用的东西,请在开发者论坛中搜索脆弱的解决方案。