沙盒:如何为用户选择的文件的封闭文件夹添加书签?

Posted

技术标签:

【中文标题】沙盒:如何为用户选择的文件的封闭文件夹添加书签?【英文标题】:Sandboxing: How to bookmark enclosing folder of user-selected file? 【发布时间】:2013-12-23 04:50:45 【问题描述】:

我正在对一个应用程序进行沙盒处理(该应用程序已在非沙盒环境中成功运行了几年)。

它需要批量的 PDF 并进行一些更改并导出它们。

用户有两种选择:

-将生成的 PDF 导出到指定文件夹,或

-将 PDF 导出到与原始文件相同的文件夹中。

第一个选项没有问题:用户在NSOpenPanel中选择一个文件夹,我创建安全范围的书签,稍后解决,文件保存成功。

但是,当用户选择将每个文件保存到其封闭文件夹中时,他们不会明确选择任何文件夹。他们只选择文件。

我可以为每个文件创建安全范围的书签,但它仍然不允许我访问文件的封闭文件夹。尝试保存文件时出现权限错误。

当我尝试为封闭文件夹创建书签时,我收到一条错误消息,提示无法打开文件:

NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]];

NSData *bookmarkData = [url
                       bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                       includingResourceValuesForKeys:nil
                       relativeToURL:nil
                       error:&err];

据我了解,这是因为用户没有明确选择文件夹,因此无法创建安全范围的书签。

我进行了广泛的研究并尝试了各种选择,但无济于事。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您在问题结尾处表达的理解是正确的。您需要询问用户对封闭文件夹的许可或提出其他设计。如果您正在更改文件扩展名(例如,编辑可以转换文件格式等),则有一个 Apple 解决方案,但不适用于您的情况是 PDF 输入,PDF 输出。将书签缓存到封闭的文件夹中,随着时间的推移,您的应用将需要较少询问用户(请记住,文件夹的书签可以访问该点下方的整个子树)。

【讨论】:

感谢 CRD!看起来我将禁用 Mac App Store 版本的第二个选项。我还将向 Apple 提交增强请求,因为在当前的限制中,只会限制用户自动执行任务的能力。 另外,您提到的更改文件扩展名的解决方案是什么?有没有可能是相关项目?我也有将 PDF 导出为其他格式的功能。但相关项目解决方案似乎只适用于文件名不变的情况——我的应用程序并非如此。 是的,它是相关项目,您是正确的,它只允许您更改扩展名/文件类型。 Apple 很清楚您的应用模型不受支持,这是他们的沙盒模型的故意功能。

以上是关于沙盒:如何为用户选择的文件的封闭文件夹添加书签?的主要内容,如果未能解决你的问题,请参考以下文章

如何为多个文件处理选择最佳 I/O 策略?

给定文件扩展名,如何为 Ace Editor 自动选择“模式”

如何为程序添加splashScreen

如何为具有多个帐户的用户在Google App Scripts中选择帐户?

数据处理文件读取---预习 1.30

如何为 Xcode UI 测试禁用沙箱