Sanboxed 应用程序,通过引用包含文件?

Sanboxed app, include files by reference?

所以我有一个沙盒应用程序,它允许用户将文件从 Finder 拖放到项目中 window。 我想从现有位置使用这些文件,即通过引用,而不是将它们复制到项目文件夹,因为用户可能有一个大型现有文件库。

虽然应用程序是 运行,但这些文件完全可供阅读。 (它们是 .mp4,我可以在 AVPlayer 视图中预览它们)。

当我保存应用程序的项目时,我包含了文件的 NSURL。 当应用程序重新启动并稍后重新打开项目时,文件不可用并且控制台显示 deny(1) file-read-data - 这意味着文件不可访问。 (访问被拒绝)。

大概是因为文件在沙盒之外。然而,将它们 放在应用程序上时 是可读的。在我看来,应用程序在第一次放置时将它们视为 "user selected",因此它们是可读的,但在下一个会话中,因为它们是作为 NSURL 从 NSCoder 加载的,所以它们不被视为用户选择的,因此变得不可访问!

我的应用目前拥有以下权利: com.apple.security.files.user-selected.read-仅 com.apple.security.files.user-selected.read-写入

我是否需要对权利等做一些事情以允许稍后重新加载文件?

首次删除文件时,您需要创建并保存一个安全范围书签,您可以在后续应用程序启动时使用它来重新获得对该文件的访问权限。阅读 Apple 的 App Sandbox in Depth 中的 Security-Scoped Bookmarks and Persistent Resource Access