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

9
在早期版本的macOS中,从安全范围书签构造的NSURL实例会在结尾处附加一个?applesecurityscope=...查询字符串。我正在一个单元测试中检查这个问题,因为这是被测试功能的要求。但是,开始于10.10 Yosemite版本,我找不到任何公共属性可以确定一个NSURL是否具有安全范围。
没有queryparameterStrings值,而-startAccessingSecurityScopedResource无论URL是否具有安全范围都会返回YES
这对于测试非常有用,因为我的单元测试不在受沙盒环境限制,但是应用程序在沙盒环境下运行,所以该函数生成的URL必须具有安全范围。
1个回答

1

您可以尝试从该URL获取安全范围的书签。这仅适用于已经过安全范围的URL,并且对于“普通”URL将失败:

let isSecurityScoped = (try? url.bookmarkData(options: .withSecurityScope,
                               includingResourceValuesForKeys: nil, 
                               relativeTo: nil)) != nil

或者您可以尝试调用url.startAccessingSecurityScopedResource()。只有当URL是安全范围时,此操作才会成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接