2013-10-29 82 views
2

我正在转换图像大小,然后将新文件保存到原始图像文件所在的同一目录中。可可:如何设置读/写文件夹的权限?

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

有没有办法以编程方式授予此权限?

+0

如何使用NSOpenPanel询问访问?你能帮忙吗? – Manthan

回答

5

您对沙箱模型长期以来一直备受关注;支持将输入文档转换为相同位置的输出文档的应用程序。

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

例如,文本编辑有这个标志,以便一旦获准进入的任何这些类型的文件时,它可以创建一个同名的文件,但任何其他类型的没有进一步.txt.rtf.rtfd文件类型设置需要用户权限。它启用诸如“转换为纯文本”之类的命令。

它从你的问题看来,你没有这样做,而是说,将“image.png”到“图像resized.png”,即改变而非的类型。没有应用程序从用户获得进一步的权限不支持。

您拥有的最佳解决方法是要求用户对他们希望调整大小的文件的封闭文件夹的权限。一旦应用程序有了它,它可以在该文件夹内执行任意数量的文件创建 - 就像您对赋予特定文件夹访问权利的观察一样。

一个过程中,你可以遵循的是:

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

3 - (是的,我错过了2,见下文)如果您没有访问,然后从用户要求它包含文件夹 - 扔了一个合适的NSOpenPanel促进他们的解释,选择包含文件夹至于为什么。

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

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

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

它不像听起来那么糟! HTH。

+0

非常感谢您的回复......您的答案非常具有说服力和完整性......但这对我来说太令人头痛了...所以我采用了另一种解决方案......非常感谢您的非常有帮助的答案......和平.. 。Massy – Blue

+0

我需要使用NSOpenPanel来请求权限,因为我正在编写的文件是styles.css.gz,而原始文件是styles.css。我把这个类放在一起,包装所有的逻辑,在必要时请求许可,并坚持这种权限。 https://github.com/leighmcculloch/AppSandboxFileAccess –