我正在对一个应用程序进行沙箱处理(该应用程序已在非沙箱处理下成功运行了几年)。
它会批量处理 PDF 并将其导出并进行一些更改。
用户有两个选择:
-将生成的 PDF 导出到指定文件夹,或
-将 PDF 导出到与原始文件相同的文件夹中。
第一个选项没有问题:用户在 NSOpenPanel 中选择一个文件夹,我创建安全范围的书签,稍后解决它,并且文件已成功保存。
但是,当用户选择将每个文件保存导出到其封闭文件夹中时,他们不会明确选择任何文件夹。他们只选择文件。
我可以为每个文件创建安全范围的书签,但它仍然不允许我访问文件所在的文件夹。当我尝试保存文件时出现权限错误。
当我尝试为封闭文件夹创建书签时,收到一条错误消息,指出该文件无法打开:
NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]];
NSData *bookmarkData = [url
bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&err];
据我了解,发生这种情况是因为用户没有明确选择文件夹,因此无法创建安全范围的书签。
我做了广泛的研究并尝试了各种选择,但一无所获。
如有任何帮助,我们将不胜感激!
最佳答案
您在问题末尾所表达的理解是正确的。您需要征求用户对封闭文件夹的许可或提出其他设计。如果您要更改文件扩展名(例如,编辑器可以转换文件格式等),有一个 Apple 解决方案,但不适用于 PDF 输入、PDF 输出的情况。将书签缓存到封闭的文件夹中,随着时间的推移,您的应用程序将需要更少地询问用户(请记住,文件夹的书签授予对该点下面的整个子树的访问权限)。
关于objective-c - 沙箱: How to bookmark enclosing folder of user-selected file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20737143/