防止通过拖放或共享扩展修改OS X应用程序沙箱容器中的原始文件?

21

我有一个鞋盒类型(而不是基于文档的)的OS X应用程序,它将图像存储在应用程序的沙箱容器中。

这些图像可以通过共享扩展(以NSURL形式)或通过拖放导出。

当将图像共享到图像编辑器(例如Acorn提供的共享扩展)或将其放置到图像编辑器上时,图像编辑器会从我的沙箱容器内打开该文件,并且现在可以更改、重命名或删除该文件 - 这可能导致我的应用程序发生各种不一致性。

首先,我感到惊讶,因为我认为,沙箱中的文件只能由应用程序本身访问。但是,当我有意分享NSURL时,似乎并非如此。

那么我如何防止别人在我的沙箱容器中更改文件,同时仍然提供它们的拖放和共享扩展呢?

  • 我尝试不共享NSURL,而是使用NSImages,但是许多共享扩展无法使用NSImages,因此这不是一个好选择。
  • 是否有可能对沙箱中的文件进行写保护?
  • 在提供共享或拖放之前,我是否应始终将图像的副本复制到临时位置(对于大型图像可能很慢)?

我很乐意听取您的建议或了解更多有关问题的信息。


2
我看到有两个选择,但都需要花费。1-你可以把所有东西都放在数据库里而不是沙盒中,或者2-让你的应用程序创建原始文件的副本,然后将其交给编辑器... - Farini
1
通常情况下,您无法退出您的沙盒,但如果它们没有被沙盒化,其他应用程序可以进入您的沙盒。在您的情况下,如果您提供文件URI,其他应用程序将被允许访问该文件。 - 写保护是不可能的。我认为最好的方法是提供一个临时副本。如果您确实使用大文件而且速度太慢,请显示“正在打开…”的进度。 - Axel Zehden
感谢您对沙盒的总结,@AxelZehden。看来我得找到一种方法,在不过多打扰用户的情况下制作临时副本。也许我可以先显示共享选项,然后在用户选择一个选项时,将其复制到NSTemporaryDirectory,最后分享此副本。 - MartinW
也许书签可以解决你的问题。 - Axel Zehden
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接