11

我一直在网上搜索和 Apple 的帮助,以寻求有关这方面的某种指导,但最终还是失败了。我想知道是否有人遇到过类似的情况,或者可能对正在(或没有)发生的事情有所了解。

我正在尝试为应用程序在以后的会话中调用的文件获取应用程序范围的书签。在用户选择后,我可以确认路径本身已正确添加到沙箱中,因为我可以在会话期间打开(并重新打开)它。

但是,尝试获取安全范围的书签以稍后访问它是行不通的。

这就是我正在做的事情:

NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
NSError *error = nil;
NSData *bookmarkData = [url
           bookmarkDataWithOptions:(1UL << 11) //NSURLBookmarkCreationWithSecurityScope
           includingResourceValuesForKeys:nil
           relativeToURL:nil
           error:&error];
[url release];

我已经尝试过使用url从字符串生成的path方法以及仅使用例如 NSSavePanel 的结果对其进行测试URL。(由于遗留原因,该字符串path是我希望能够使用的字符串。)

我不得不使用 for 的值bookmarkDataWithOptions而不是常量,因为由于一些其他遗留代码的原因,我不得不使用NSURLBookmarkCreationWithSecurityScope不可用的 10.6 SDK 进行编译。

我可以确认路径指向有问题的文件为“/Users/me/Documents/document.ext”,并且NSURL似乎正确初始化(或至少反映了相同的路径)。

该应用程序包括权利com.apple.security.files.bookmarks.app-scope

无论如何,这是行不通的。该代码导致 abookmarkData为 0x0 和 anerror为 0x0,控制台显示:ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.

如果我更改relativeToURL为isurl而不是nil并将权利更改为com.apple.security.files.bookmarks.document-scope,那么它似乎可以正常工作 - 也就是说,bookmarkData至少获得一个非零值并且不会记录任何错误。但我很确定这不是我想要的(即文档范围的书签)。

有什么明显的我做错了吗?

4

2 回答 2

10

令我永远感到羞耻的是,这是我的错。

不知何故,在将项目移动到另一台机器进行测试和调试时,开发版本的代码签名被关闭了。

显然,这会导致事情(几乎)静默失败,没有错误代码,控制台中只有一条神秘消息,没有其他迹象表明其他任何事情都无法正常工作。

把它留在这里,以防其他人错误地做同样的事情。

于 2012-11-16T05:28:29.513 回答
0

您好 2019 年及以后的 Google 员工。我遇到了同样的问题并通过重做我的开发证书来解决它。只需取消选中“自动管理签名”并重新选中(可能切换到不同的团队并切换回来)。

于 2019-05-20T01:25:37.320 回答