您对沙盒模型存在长期担忧;支持将输入文档转换为同一位置的输出文档的应用程序。
Apple 解决了应用程序 Info.plist 中文档类型的 NSIsRelatedItemType 条目的部分问题。如果此标志存在并且YES 在多个文档类型条目中,则当您的应用程序被授予对其中一种类型文件的访问权限时,您的应用程序将有权创建任何其他类型的文件。
例如,TextEdit 为.txt、.rtf 和.rtfd 文件类型设置了此标志,因此一旦获得对这些类型中任何一种文件的访问权限,它就可以创建一个同名但属于以下任何一种文件的文件其他类型无需进一步的用户许可。它启用诸如“转换为纯文本”之类的命令。
从您的问题看来,您没有这样做,而是说将“image.png”转换为“image-resized.png”,即更改 name 而不是 输入。如果应用程序没有从用户那里获得进一步的权限,则不支持此操作。
最好的解决方法是询问用户是否允许访问他们希望调整大小的文件所在的封闭文件夹。一旦应用程序拥有该权限,它就可以在该文件夹中执行任意数量的文件创建 - 就像您观察到授予访问某些特殊文件夹的权利一样。
您可以遵循的一个过程是:
1 - 当需要创建输出文件时,检查应用程序是否可以访问 包含文件夹 - 您可以为此使用 access 函数(参见 OS X 手册第 2 节,例如“man在终端中访问”或在 Xcode 的文档中搜索访问权限)。
3 - (是的,我错过了 2,见下文)如果您没有访问权限,请向用户 for 请求包含文件夹 - 抛出一个合适的 NSOpenPanel 提示他们选择包含解释为什么的文件夹。
4 - 一旦您获得访问权限保存 - 将安全范围的书签存储到应用程序“应用程序支持”目录中的文件中的该文件夹中。您可以在构建缓存时“修剪”缓存 - 任何文件夹的书签都无需在文件系统树中的任何文件夹下添加书签。这样做可以:
2 - 如果您没有访问权限,请检查您保存的书签的缓存,看看您是否有一个文件夹,如果有,请激活它。请注意,此检查是针对文件系统树中包含文件夹或其任何父文件夹的书签。
随着时间的推移使用此过程,您将积累对用户使用的文件夹的访问权限。您应该为用户提供一种清理缓存的方法。
这并不像听起来那么糟糕! HTH。