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

时间:2017-07-03 18:01:51

标签: macos nsurl appstore-sandbox

在早期版本的macOS中,从安全范围的书签构造的NSURL个实例会在其末尾标记?applesecurityscope=...个查询字符串。我在单元测试中检查这个,因为它是被测功能的要求。现在,从优胜美地10.10开始,我无法找到一种方法来确定NSURL的任何面向公众的财产是否具有安全范围。

没有queryparameterStrings值,-startAccessingSecurityScopedResource返回YES是否具有安全范围。

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

1 个答案:

答案 0 :(得分:0)

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

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

或者,您可以尝试致电url.startAccessingSecurityScopedResource()。只有在url受安全范围限制的情况下,此操作才会成功。