在Cocoa中:如何设置读/写文件夹的权限?

时间:2013-10-29 16:42:26

标签: cocoa sandbox file-permissions directory-permissions

我正在转换图像大小,然后我将新文件保存到原始图像文件所在的同一目录中。

我只能为“images”目录设置权限。如果我的应用程序需要选择该目录中的图像,它将按预期工作。如果我选择另一个目录中的图像(例如用户创建的目录文件夹),则不会显示新图像。 我在App Sandbox中看到的只是“用户选择的文件”目录,“图像”目录,“下载”目录,“图片”目录,“音乐”目录和“电影”目录。

有没有办法以编程方式提供此权限?

1 个答案:

答案 0 :(得分:7)

你对沙箱模型的长期关注;支持将输入文档转换为同一位置的输出文档的应用程序。

Apple针对应用程序NSIsRelatedItemType中的文档类型的Info.plist条目解决了该问题的一个子集。如果此标志存在且YES存在于多个文档类型条目中,那么当您的应用程序访问其中一种类型的文件时,您有权创建任何其他类型的文件。

例如,TextEdit为.txt.rtf.rtfd文件类型设置了此标志,因此一旦访问了任何这些类型的文件,它就可以创建一个文件同名,但任何其他类型的名称,无需进一步的用户许可。它启用“转换为纯文本”等命令。

从你的问题看来,你没有这样做,但是说,将“image.png”转换为“image-resized.png”,即更改名称而不是输入的。如果应用程序无法获得用户的进一步权限,则不支持此操作。

您拥有的最佳解决方法是要求用户获得他们希望调整大小的文件的封闭文件夹的权限。一旦应用程序具有该功能,它就可以在该文件夹中执行任意数量的文件创建 - 就像您观察到可以访问某些特殊文件夹的权利一样。

您可以遵循的一个过程是:

1 - 当需要创建输出文件时,检查应用程序是否可以访问包含文件夹 - 您可以使用access功能(参见OS X手册第2节,例如在终端中“人访问”或在Xcode的文档中搜索访问权限。)

3 - (是的,我错过了2,见下文)如果您没有访问权限,请向用户申请包含文件夹 - 提出合适的NSOpenPanel宣传这些文件夹选择包含文件夹,并说明原因。

4 - 一旦您被授予访问权限保存 - 将安全范围的书签存储到应用程序“Application Support”目录中的文件中的该文件夹。您可以在构建缓存时“修剪”缓存 - 任何文件夹的书签都不需要在文件系统树中对其下面的任何文件夹添加书签。这样做可以:

2 - 如果您没有访问权限,请检查已保存书签的缓存,看看您是否有一个该文件夹,如果是,请激活它。请注意,此检查用于包含文件夹或文件系统树中任何其父文件夹的书签。

随着时间的推移,您将累积对用户使用的文件夹的访问权限。您应该为用户提供清理缓存的方法。

它没有听起来那么糟糕! HTH。