gpt4 book ai didi

cocoa - Mac操作系统应用程序: How to resolve alias and read original file within sandbox

转载 作者:行者123 更新时间:2023-12-03 16:19:39 24 4
gpt4 key购买 nike

我的 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 文件时,收到错误:无法打开该文件,因为您无权查看它

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

我还尝试使用 NSURLBookmarkResolutionWithSecurityScope 选项解析书签数据,但收到 “该文件无法打开,因为它的格式不正确。” 错误URLByResolvingBookmarkData 方法。

那么,怎么做呢?谢谢。

最佳答案

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

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

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

关于cocoa - Mac操作系统应用程序: How to resolve alias and read original file within sandbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com