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

Objective c 沙盒:如何为用户选择的文件的封闭文件夹添加书签?,objective-c,cocoa,url,sandbox,bookmarks,Objective C,Cocoa,Url,Sandbox,Bookmarks,我正在沙盒一个应用程序(它已经成功运行了几年没有沙盒) 它获取批量PDF,并将其导出,同时进行一些更改 用户有两种选择: -将生成的PDF导出到指定文件夹中,或 -将PDF导出到与原始文件相同的文件夹中 第一个选项没有问题:用户在NSOpenPanel中选择一个文件夹,我创建安全范围的书签,稍后解决它,文件被成功保存 但是,当用户选择保存并将每个文件导出到其封闭文件夹中时,他们不会显式选择任何文件夹。他们只选择文件 我可以为每个文件创建安全范围的书签,但它仍然不允许我访问文件的封闭文件夹。我尝试

我正在沙盒一个应用程序(它已经成功运行了几年没有沙盒)

它获取批量PDF,并将其导出,同时进行一些更改

用户有两种选择:

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

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

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

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

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

当我尝试为封闭文件夹创建书签时,出现一个错误,该错误表示无法打开该文件:

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

NSData *bookmarkData = [url
                       bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                       includingResourceValuesForKeys:nil
                       relativeToURL:nil
                       error:&err];
据我所知,这是因为用户没有明确选择文件夹,因此无法创建安全范围的书签

我做了广泛的研究,尝试了各种选择,但都没有成功


任何帮助都将不胜感激

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

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