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

标签 macos nsurl foundation security-scoped-bookmarks

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

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

什么startAccessingSecurityScopedResource()其实呢?如果我不打电话,有什么不好的事情会发生吗?

最佳答案

只要您的应用仅访问标准位置(下载、音乐)中的文件
电影、图片)并且您包含了所需的 entitlements for programmatic file and folder access在您的应用程序中,您不需要为这些位置存储安全范围的书签。

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

关于macos - startAccessingSecurityScopedResource() 实际上是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42179567/

相关文章:

macos - NSWorkSpace SetIcon 不刷新

xcode - 用户登录后Mac OSX App崩溃

ios - "NSURL? unable to read data"当我尝试从字符串获取值时

swift - 解包可选值时 NSURL nil |角色不工作?

cocoa - NSURL 具有自定义方案?

iOS应用程序运行断点

objective-c - NSBundle 的 -load 方法如何向 Objective-C 运行时注册类和其他运行时资源?

macos - 多平台应用程序 : (Automated) Testing for Mac OSX howto?

ios - NSDateIntervalFormatter 打印日期,即使 dateStyle 设置为 NSDateFormatterNoStyle

macos - 如何隐式运行 shell 脚本?