例如,如果我有一个XML文件(从其他应用程序导出的,所以我没有对内容没有控制),它引用在不同的文件夹中的图像到XML文件,我不能够读取图像,直到用户使用浏览他们我的应用程序。
我可以让他们浏览到上一级文件夹避过它(甚至浏览到“/”),但它似乎有点废话是告诉用户“我不能访问/路径/到/文件,可以请你现在浏览到它,这样我就可以打开它?”
是否有这个没有更好的办法? 是不是有一些方法来显示一个提示,如“AppX中试图从/用户读取/用户X / FolderX,你会准许?”
例如,如果我有一个XML文件(从其他应用程序导出的,所以我没有对内容没有控制),它引用在不同的文件夹中的图像到XML文件,我不能够读取图像,直到用户使用浏览他们我的应用程序。
我可以让他们浏览到上一级文件夹避过它(甚至浏览到“/”),但它似乎有点废话是告诉用户“我不能访问/路径/到/文件,可以请你现在浏览到它,这样我就可以打开它?”
是否有这个没有更好的办法? 是不是有一些方法来显示一个提示,如“AppX中试图从/用户读取/用户X / FolderX,你会准许?”
见我的问题和答案在这里: 应用程序沙箱:文件范围的加入书签的未解决; 不返回任何错误
我收集嵌入范围的书签到我的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]];
下面是关于文件NSSavePanel
( NSOpenPanel
从它继承,并且上述特性定义在那里)。
这是一个黑客(有点像你提到的) - 如果你可以检测该文件已嵌入的文件路径 - 你已经打开了文件之后 - 你可以提示用户“导入文件”,然后选择父目录,并复制父目录的沙箱读取文件?
我知道很烂但看了对沙箱苹果没有西元嵌入式书签到文件林不知道你真的能做些什么。