沙箱问题:加载文档时自动加载影片

时间:2018-01-31 03:12:26

标签: macos quicktime appstore-sandbox nsopenpanel

我有一个独特的情况,虽然我明白问题是什么,但我不太清楚最好的解决办法是什么,所以我想我会咨询蜂巢的想法。 :)

情境:

我正在开发一个基于文档的应用程序(OS X)并使用Quicktime。创建新文档时,用户选择要在文档窗口中查看的影片。然后,用户可以保存此文档。当用户稍后尝试打开文档时,没有任何反应。它只是没有打开。

到目前为止我所知道的事情:

问题在于Sandbox的运行方式,以及我使用它的有限经验(我的第一次尝试。)我已启用Sandbox并将应用程序权限设置为允许任何用户启动的文件操作,并且还为应用程序添加了权限访问Movies文件夹。

当用户加载文档并且“电影”位于“电影”文件夹中时,它将打开并正常工作。但是,如果电影在用户驱动器上的任何其他位置,则它不起作用并执行如上所述。

我意识到这是因为当用户可以打开文档(用户启动)时,沙盒会在尝试自动打开链接的电影时(非用户启动)阻止应用程序,除非电影位于Movies文件夹中。

由于应用程序旨在处理大型文件,因此强制用户将文件复制到其影片文件夹并将其留在那里似乎是一个很大的限制。

(我还没有尝试使用位于外部驱动器上的电影,但怀疑它可以工作,因为它不是系统驱动器。)

问题:

有没有办法解决这个问题,因为用户最初启动了打开电影的任务?

如果没有,是否有一种方法让应用程序要求用户确认应该加载电影...也许就像呈现已打开电影的OPEN对话框,这样他们只需单击OK?这可能是最好的解决方案。

另一种选择可能是在用户最初选择时自动将电影复制到Movies文件夹中,但同样对我的情况不太了解......

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:1)

正如您所描述的那样,您的应用程序有权访问其自己的容器和Movies文件夹中的文件。要访问任意电影文件,您必须:

  • 让用户启动对文件的访问,即,当创建新文档时,用户必须使用文件选择器来访问电影文件。然后扩展沙箱的权限以允许访问所选文件。

  • 这些访问权限是暂时的。要通过应用程序重新启动来保留它们,您必须通过安全范围的书签保存和恢复访问权限。

请参阅 PowerBox 上的Apples documentation安全范围书签

WWDC 2013的Session 710也可能会有所帮助。