Mac App Store沙盒和处理10.7.3之前的安全范围书签

spu*_*eon 6 macos cocoa bookmarks sandbox app-store

应用程序重新启动后,我需要沙盒应用程序重新打开打开的文件.Apple使用NSURL书签创建和解析方法中的NSURLBookmarkCreationWithSecurityScopeNSURLBookmarkResolutionWithSecurityScope选项提供安全范围的书签.但是,这些标志/选项仅适用于10.7.3或更高版本,并导致10.7.3之前的应用程序失败.

如何在沙盒应用中处理10.6到10.7.3的文件书签保留/重新打开?

-

后续行动:请在下面看到我的答案.问题不是由使用NSURLBookmarkCreationWithSecurityScope而是使用安全范围的书签启动和停止方法引起的.

spu*_*eon 9

事实证明使用NSURLBookmarkCreationWithSecurityScope不会导致10.7 - 10.7.2的问题.导致失败的原因是-[NSURL startAccessingSecurityScopedResource]:在10.7.3之前调用哪个不受支持.因此,您需要使用OS检查或respondsToSelector检查来包装对此方法(以及相应的stop方法)的调用.我测试了书签仍然可以在10.7.1中工作,只要你确保不要调用开始/停止.

以下是一些使用的代码片段respondsToSelector,可以帮助其他任何运行此问题的代码:

使用它来开始使用:

if([bookmarkFileURL respondsToSelector:@selector(startAccessingSecurityScopedResource)]) { // only supported by 10.7.3 or later
    [bookmarkFileURL startAccessingSecurityScopedResource]; // start using bookmarked resource
}
Run Code Online (Sandbox Code Playgroud)

并停止使用:

if([bookmarkFileURL respondsToSelector:@selector(stopAccessingSecurityScopedResource)]) { // only supported by 10.7.3 or later
    [bookmarkFileURL stopAccessingSecurityScopedResource]; // stop using bookmarked resource
}
Run Code Online (Sandbox Code Playgroud)