10.7.3 之前的 Mac App Store 沙盒和处理安全范围的书签
Posted
技术标签:
【中文标题】10.7.3 之前的 Mac App Store 沙盒和处理安全范围的书签【英文标题】:Mac App Store sandboxing and handling security-scoped bookmarks prior to 10.7.3 【发布时间】:2012-08-30 01:50:14 【问题描述】:我需要我的沙盒应用在应用重新启动后重新打开打开的文件。 Apple 在 NSURL 书签创建和解析方法中为安全范围的书签提供了 NSURLBookmarkCreationWithSecurityScope
和 NSURLBookmarkResolutionWithSecurityScope
选项。但是,这些标志/选项仅适用于 10.7.3 或更高版本,并导致 10.7.3 之前的应用程序失败。
如何在沙盒应用中处理 10.6 到 10.7.3 的文件书签的保留/重新打开?
--
跟进:请在下面查看我的回答。该问题不是由使用 NSURLBookmarkCreationWithSecurityScope
引起的,而是由使用安全范围的书签启动和停止方法引起的。
【问题讨论】:
我猜你可能做不到。这是他们的沙盒方法的一个缺点,因此添加了额外的机制。而且苹果不是一个向后移植的东西...... 你确定这是失败的原因吗?我有一个使用[NSURL URLByResolvingBookmarkData:bookmark options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:NO error:nil];
的应用程序(在 MAS 中),它在 10.6.8 机器上运行良好。
@Patrick - 它在 10.7 - 10.7.2 上工作正常吗? (沙盒在 10.6.8 上无法运行,URL 的解析可能会忽略 10.7.3+ 添加的任何安全信息 - 只是猜测)
嗯,我应该更彻底地检查 Console.app。我在 10.7.1 上测试时收到以下错误消息:-[NSURL startAccessingSecurityScopedResource]: unrecognized selector sent to instance 0x10420e180
这是否意味着我需要使用 OS X 10.7.3 或更高版本检查来包装启动/停止方法?
【参考方案1】:
事实证明,使用 NSURLBookmarkCreationWithSecurityScope
不会导致 10.7 - 10.7.2 出现问题。导致失败的原因是调用 -[NSURL startAccessingSecurityScopedResource]:
,这在 10.7.3 之前不受支持。因此,您需要使用 OS 检查或 respondsToSelector 检查来包装对此方法(和相应的停止方法)的调用。我测试了书签在 10.7.1 中仍然有效,只要您确保不调用 start/stop。
这里有一些使用respondsToSelector
的代码sn-p,它将帮助遇到此问题的任何其他人:
使用它开始使用:
if([bookmarkFileURL respondsToSelector:@selector(startAccessingSecurityScopedResource)]) // only supported by 10.7.3 or later
[bookmarkFileURL startAccessingSecurityScopedResource]; // start using bookmarked resource
这是停止使用:
if([bookmarkFileURL respondsToSelector:@selector(stopAccessingSecurityScopedResource)]) // only supported by 10.7.3 or later
[bookmarkFileURL stopAccessingSecurityScopedResource]; // stop using bookmarked resource
【讨论】:
为什么不直接使用 respondsToSelector 而不是检查操作系统版本? @Ben-Uri 你说得对,respondsToSelector
是比检查操作系统版本更好的实现。我更新了答案。以上是关于10.7.3 之前的 Mac App Store 沙盒和处理安全范围的书签的主要内容,如果未能解决你的问题,请参考以下文章
Mac App Store Xcode 5 删除 Xcode 4
mac 上如何安装非app store上的下载的软件-------打开未知来源
Mac App Store 的多语言应用程序 - 在哪里设置 Mac App Store 中显示的语言?