2012-08-02 126 views
3

例如,如果我有一个XML文件(从其他应用程序导出的,所以我没有对内容没有控制),在不同的文件夹中引用图片时,我访问由另一个文件引用的文件到XML文件,我不能读取图像,直到用户使用我的应用程序浏览它们。如何沙盒(应用程序商店)

我可以让他们浏览到上一级文件夹(甚至浏览到“/”)绕过它,但它似乎有点废话要告诉用户“我不能访问/路径/到/文件,你可以请现在浏览它,所以我可以打开它吗?“

是否有这个没有更好的办法?是不是有某种方式来显示提示,如“AppX正试图从/ Users/UserX/FolderX读取,你会授予权限吗?”

+0

我不知道有什么可以做,除了提示用户打开你想要的文件,并将它们复制到您的沙盒文件夹? – trojanfoe 2012-08-02 15:11:28

回答

3

见我的问题和答案在这里:App Sandbox: document-scoped bookmark not resolving; not returning any error

我收集嵌入范围的书签到我的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]]; 

下面是它的documentation on NSSavePanelNSOpenPanel继承和上面的属性在那里定义)。

+0

XML文件不是由我创建的,而是从另一个应用程序导出的,所以我无法控制进入它的内容。 – Grezzo 2012-08-10 08:59:25

+0

够公平的,我只是希望找到比让用户浏览更为权威的方式。似乎没有其他办法。我们实施的解决方案是告诉用户哪个文件夹包含我们需要访问的文件,然后让他们浏览到该文件夹​​。这些文件通常在〜/ Documents文件夹的子文件夹中,所以我告诉他们一个更高的文件夹是可以的。我存储书签,所以他们希望不必经常浏览它们。 – Grezzo 2012-08-17 06:32:39

+0

您也可以将浏览器初始化为您建议的文件夹,并在浏览器中给出说明文字。他们所要做的只是点击“确定”(或者你甚至可以将该按钮的标题改为“允许”)。 – Dov 2012-08-17 10:27:15

2

这是一个黑客(有点像你提到的) - 如果你可以检测该文件已嵌入的文件路径 - 你已经打开了文件之后 - 你可以提示用户“导入文件”,然后选择父目录并将父目录复制到沙箱以读取文件?

我知道很烂但看了对沙箱苹果没有西元嵌入式书签到文件林不知道你真的能做些什么。