沙盒:如何为用户选择的文件的封闭文件夹添加书签?
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 很清楚您的应用模型不受支持,这是他们的沙盒模型的故意功能。以上是关于沙盒:如何为用户选择的文件的封闭文件夹添加书签?的主要内容,如果未能解决你的问题,请参考以下文章
给定文件扩展名,如何为 Ace Editor 自动选择“模式”