如何确定 NSURL 是否具有安全范围信息?

Dov*_*Dov 8 macos nsurl appstore-sandbox

在早期版本的 macOS 中,NSURL从安全范围的书签构造的实例将?applesecurityscope=...在其末尾标记一个查询字符串。我在单元测试中对此进行了检查,因为这是被测功能的要求。现在,从 10.10 Yosemite 开始,我找不到从任何面向公众的属性中NSURL确定它是否具有安全范围的方法。

没有queryorparameterStrings值,并-startAccessingSecurityScopedResource返回YESURL 是否具有安全范围。

这对于测试特别有用,因为我的单元测试不在沙盒环境中运行,但应用程序是,因此函数生成的 URL 必须具有安全范围。

Mar*_*ark 1

您可以尝试从该 URL 获取安全范围的书签。仅当 url 已在安全范围内时才有效,并且对于“常规”url 将失败:

let isSecurityScoped = (try? url.bookmarkData(options: .withSecurityScope,
                               includingResourceValuesForKeys: nil, 
                               relativeTo: nil)) != nil
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试致电url.startAccessingSecurityScopedResource(). 仅当 url 处于安全范围内时,此操作才会成功。