【问题标题】:How do I gain access to files referenced by another file when sandboxed (app-store)沙盒(应用商店)时如何访问另一个文件引用的文件
【发布时间】:2012-08-02 12:35:06
【问题描述】:

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

我可以通过让他们浏览到更高级别的文件夹(甚至浏览到“/”)来绕过它,但是告诉用户“我无法访问 /path/to/file,请您现在浏览一下,我可以打开它吗?”

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

【问题讨论】:

  • 我不确定除了提示用户打开您想要的文件并将它们复制到您的沙盒文档文件夹之外,您还能做什么?

标签: objective-c xcode macos app-store appstore-sandbox


【解决方案1】:

在这里查看我的问题和答案: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 继承自它,上面的属性在那里定义)。

【讨论】:

  • XML 文件不是我创建的,它是从另一个应用程序导出的,所以我无法控制其中的内容。
  • 很公平,我只是希望找到比让用户浏览更好的请求权限的方法。好像没有别的办法了。我们实施的解决方案是告诉用户哪个文件夹包含我们需要访问的文件,然后让他们浏览到该文件夹​​。这些文件通常位于 ~/Documents 等文件夹的子文件夹中,所以我告诉他们更高的文件夹很好。我正在存储书签,因此希望它们不必经常浏览它们。
  • 您也可以将浏览器初始化为您建议的文件夹,并在浏览器中给出解释性文字。他们所要做的就是点击“确定”(或者您甚至可以将该按钮的标题更改为“允许”之类的内容)。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多