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 书签创建和解析方法中为安全范围的书签提供了 NSURLBookmarkCreationWithSecurityScopeNSURLBookmarkResolutionWithSecurityScope 选项。但是,这些标志/选项仅适用于 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 中显示的语言?

Mac App store出现未知错误怎么办

iTunes,iTunes Store和App Store区别

sh 简单的bash脚本用于从mac App Sierra创建可启动ISO从Mac App Store安装映像