2012-11-15 103 views
10

我一直在搜索网络,Apple对此提供了一些帮助,并且提供了一些指导。我想知道是否有人遇到过类似的情况,或者可能对某些事情(或者没有)有所了解。无法获取适用于文件的应用程序书签 - OS X沙箱

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

但是,试图获取安全范围的书签以后访问它不起作用。

下面是我在做什么:

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

我已经从字符串path以及只是测试它产生url尝试了两种,例如,的NSSavePanel的URL结果。 (由于遗留原因,字符串path是我希望能够使用的那个)。

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

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

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

无论如何,这是行不通的。在这两个代码结果为0x0的bookmarkData和为0x0的error,并在控制台显示:ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.

如果我改变relativeToURLurl,而不是nil,改变有权com.apple.security.files.bookmarks.document-scope,那么似乎正常工作 - 这是,bookmarkData至少获得一个非零值,并没有记录错误。但我非常确定这不是我想要的(即文档范围书签)。

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

回答

9

我永远的耻辱,这是我的错。

以某种方式将项目移动到另一台机器进行测试和调试时,开发构建的代码签名已关闭。

显然这导致(几乎)静默失败,没有错误代码和控制台中只有一个神秘的消息,没有其他迹象表明其他任何工作不正常。

如果有人错误地做了同样的事情,留在这里。

+0

那么,我可以确认一个未签名的版本会导致这种情况。对于任何人在这里磕磕绊绊,我正在调试开源[Mac Linux的USB加载器](https://github.com/SevenBits/Mac-Linux-USB-Loader),这解决了我的问题。 – Bigood