3

我的mac os应用程序通过用户交互(拖放)获取别名的NSURL,因此该应用程序有权读取别名文件,但它无权读取应用程序沙箱中的原始文件(Mac OS X 10.7 /8)。

我通过以下方式解析别名

NSData* bookmark = [NSURL bookmarkDataWithContentsOfURL:aliasURL error:nil];
origURL = [NSURL URLByResolvingBookmarkData:bookmark
                                    options:NSURLBookmarkResolutionWithoutUI
                              relativeToURL:nil
                        bookmarkDataIsStale:nil
                                      error:&error];

当我尝试读取 origURL 文件时,出现错误:The file couldn’t be opened because you don’t have permission to view it.

我也尝试start/stopAccessingSecurityScopedResource在 origURL 上调用,但没有帮助。

我也尝试使用NSURLBookmarkResolutionWithSecurityScope选项解析书签数据,但从"The file couldn’t be opened because it isn’t in the correct format."URLByResolvingBookmarkData 方法中得到错误。

那么,怎么做呢?谢谢。

4

2 回答 2

3

我还没有尝试过,但我想我可能知道发生了什么。OS X 通过拖放穿透沙箱的方式是授予应用程序将文件拖放到对已删除文件的访问权限,直到应用程序退出。这使用粘贴板上的普通NSString文件路径工作,因此它不依赖于安全范围机制。

您的应用程序可能有权访问别名文件,但只能访问该文件,而不是它所引用的文件。沙盒打孔机制可能不遵循别名并授予对底层文件的访问权限。如果您可以获得别名指向的文件的路径(我不确定这是否可能),您可以通过提示用户在NSOpenPanel. 这是通过沙盒的另一种方式,使用 Apple 所谓的“Power Box”。

有关如何执行此操作的更多信息,请查看我在这里写的答案:https ://stackoverflow.com/a/11786156/105717 。它链接到另一个答案,然后添加一些有用的细节,使用户更清楚正在发生的事情。

于 2012-10-17T14:28:56.520 回答
0

也许,也许我的类似情况和解决方案会有所帮助:

您是否确定在您的权利文件中将权利“com.apple.security.files.bookmarks.app-scope”设置为“yes”?

“无法打开该文件,因为它的格式不正确。” 我在尝试解决书签时遇到了同样的错误,原来是文件被锁定在 Finder 中(在文件上执行“获取信息”并选中“锁定”框已关闭)所以安全性数据从一开始就没有生成。

希望里面有帮助!

托德。

于 2012-10-14T10:28:22.913 回答