Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在沙盒(应用商店)中,如何访问其他文件引用的文件_Objective C_Xcode_Macos_App Store_Appstore Sandbox - Fatal编程技术网

Objective c 在沙盒(应用商店)中,如何访问其他文件引用的文件

Objective c 在沙盒(应用商店)中,如何访问其他文件引用的文件,objective-c,xcode,macos,app-store,appstore-sandbox,Objective C,Xcode,Macos,App Store,Appstore Sandbox,例如,如果我有一个将不同文件夹中的图像引用到XML文件的XML文件(从另一个应用程序导出,因此我无法控制内容),则在用户使用我的应用程序浏览到图像之前,我无法读取图像 我可以让他们浏览到更高级别的文件夹(甚至浏览到“/”),但告诉用户“我无法访问/path/to/file,你能现在浏览到它,这样我就可以打开它了”似乎有点垃圾 有没有更好的解决办法?是否有某种方式可以显示类似“AppX正在尝试从/Users/UserX/FolderX读取,您是否授予权限?”这样的提示?请参见我的问题和答案: 我正

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

我可以让他们浏览到更高级别的文件夹(甚至浏览到“/”),但告诉用户“我无法访问/path/to/file,你能现在浏览到它,这样我就可以打开它了”似乎有点垃圾


有没有更好的解决办法?是否有某种方式可以显示类似“AppX正在尝试从/Users/UserX/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]];
这是(
NSOpenPanel
继承自它,上面的属性在这里定义)。

这是一种黑客行为(有点像你提到的那种)-如果你能检测到文件中嵌入了文件路径-打开文件后-你能提示用户“导入文件”吗,然后选择父目录并将父目录复制到沙箱中以读取文件


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

我不确定除了提示用户打开你想要的文件并将其复制到你的沙盒文档文件夹之外,你还能做些什么。XML文件不是我创建的,它是从另一个应用程序导出的,所以我无法控制它的内容。公平地说,我只是希望找到一种比让用户浏览更好的请求权限的方式。看来没有别的办法了。我们实现的解决方案是告诉用户哪个文件夹包含我们需要访问的文件,然后让他们浏览到该文件夹。这些文件通常位于像~/Documents这样的文件夹的子文件夹中,所以我告诉他们,较高的文件夹就可以了。我正在存储书签,希望它们不必经常浏览。您也可以将浏览器初始化为您建议的文件夹,并在浏览器中提供解释性文本。他们所要做的就是点击“OK”(或者你甚至可以把按钮的标题改成“Allow”)。