startAccessingSecurityScopedResource() 实际上是做什么的?

Sss*_*ift 12 macos nsurl foundation security-scoped-bookmarks

我正在制作一个沙盒 Mac 应用程序,我使用 NSOpenPanel 获取文件 URL,并将其保存到 UserDefaults 作为安全范围的书签。当我退出并重新启动应用程序时,我可以再次将数据块解析为 URL。

文档说我应该调用startAccessingSecurityScopedResource(),并检查它的返回值。(true当我调用它时确实会返回。)但是如果我不调用它,我仍然有一个已解析的 URL,而且我似乎仍然有权访问它。

什么是startAccessingSecurityScopedResource()真正做到?如果我不打电话,有什么不好的事情会发生吗?

seb*_*seb 5

只要您的应用程序仅访问标准位置(下载、音乐电影、图片)中的文件,并且您在应用程序中包含了程序化文件和文件夹访问所需的权利,您就无需为这些位置存储安全范围的书签。

但是对于在应用程序重新启动后应该仍然可以访问的其他位置,您应该存储安全范围的书签并startAccessingSecurityScopedResource()在访问之前调用。如果您跳过该步骤,您将在尝试访问该文件时立即收到异常。

startAccessingSecurityScopedResource() 使安全范围书签的资源可用于您的应用程序的沙箱,从而授予您对该资源的访问权限。

  • 我也遇到了这个问题,一开始并不清楚这一切是如何运作的。我在这里写了博客:https://benscheirman.com/2019/10/troubleshooting-appkit-file-permissions/ (2认同)