3

例如,如果我有一个 XML 文件(从另一个应用程序导出,因此我无法控制内容),它将不同文件夹中的图像引用到 XML 文件,我无法读取图像,直到用户使用浏览它们我的应用程序。

我可以通过让他们浏览到更高级别的文件夹(甚至浏览到“/”)来解决这个问题,但是告诉用户“我无法访问 /path/to/file,你能拜托吗?”现在浏览它,我可以打开它吗?”

有没有更好的解决方案?是不是有某种方法可以显示类似“AppX 正在尝试从 /Users/UserX/FolderX 读取,你会授予权限吗?”这样的提示。

4

2 回答 2

3

在此处查看我的问题和答案:App Sandbox:文档范围的书签未解析;不返回任何错误

我将集合范围的书签嵌入到我的 XML 文件中。

更新

鉴于您无法控制输入 XML 格式的规范,让您的应用程序访问 XML 中指定的文件的唯一方法是让用户选择该文件或NSOpenPanel. 如果 XML 包含多个文件引用,您可以让用户授予对包含所有文件引用的目录的访问权限。

没有办法绕过请求许可,因为这会破坏沙盒的目的。如果您的应用程序可以绕过用户的直接许可,那么恶意软件也可以。但是,一旦获得访问权限,您就可以为每个文件创建一个安全范围的书签,这样您就无需多次请求用户许可。

更新 2

回答您评论中的问题,您可以通过以下方式使用户更轻松地进行对话:

[openPanel setMessage:@"Click 'OK' to allow access to files contained in the selected directory"];
[openPanel setDirectoryURL:[NSURL fileURLWithPath:pathFromTheXMLFile]];

这是关于NSSavePanelNSOpenPanel继承自它的文档,上面的属性是在那里定义的)。

于 2012-08-02T21:36:16.250 回答
2

这是一个 hack(有点像你提到的那个)——如果你能检测到文件有嵌入的文件路径——在你打开文件之后——你能提示用户“导入文件”,然后选择父目录并复制沙箱的父目录读取文件?

我知道这很糟糕,但是在没有在文件中嵌入书签的情况下观看了沙盒上的苹果视频,我不确定你还能做什么。

于 2012-08-10T12:12:19.920 回答