Macos 防止来自OS X应用程序的原始文件';要通过拖放或共享扩展修改的沙盒容器?

Macos 防止来自OS X应用程序的原始文件';要通过拖放或共享扩展修改的沙盒容器?,macos,cocoa,drag-and-drop,sandbox,appstore-sandbox,Macos,Cocoa,Drag And Drop,Sandbox,Appstore Sandbox,我有一个鞋盒类型(与基于文档的不同)的OSX应用程序,它将图像存储在应用程序的沙盒容器中 这些图像可以通过共享扩展(以NSURL的形式)共享,也可以通过拖放导出 当图像共享给图像编辑器(例如Acorn提供共享扩展名)或放到图像编辑器上时,图像编辑器会从我的沙盒容器中打开文件,现在可以更改、重命名或删除此文件——这可能会导致我的应用程序中出现各种不稳定情况 首先,我很惊讶,因为我认为沙盒中的文件只能由应用程序本身访问。但当我有意分享NSURL时,情况似乎并非如此 那么,如何防止有人在我的沙盒容器中

我有一个鞋盒类型(与基于文档的不同)的OSX应用程序,它将图像存储在应用程序的沙盒容器中

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

当图像共享给图像编辑器(例如Acorn提供共享扩展名)或放到图像编辑器上时,图像编辑器会从我的沙盒容器中打开文件,现在可以更改、重命名或删除此文件——这可能会导致我的应用程序中出现各种不稳定情况

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

那么,如何防止有人在我的沙盒容器中修改文件,同时仍然提供拖放和共享扩展名?

  • 我尝试过不共享NSURL而共享NSImages,但许多共享扩展无法与NSImages一起使用,因此这不是一个好的选择
  • 是否可以在沙箱中写保护文件
  • 我是否应该在提供图片共享或拖放之前,将其复制到临时位置(对于大型图片可能会比较慢?)

我很高兴听到您的建议或了解有关该问题的更多信息。

创建NSURL的书签

因此,用户仍然可以重命名、移动和删除该文件,但您注意到它并知道新的位置和名称,仍然可以访问该文件。即使它在你的沙箱之外也应该有效。 所以你可以处理这件事。


这是使用NSURL而不是简单的路径字符串的好处之一。

我看到了两个选项,但它们都很昂贵。1-你可以把它全部放在数据库中而不是沙盒中,或者2-让你的应用程序创建原始文件的副本,然后交给编辑器…一般来说:你不能退出你的沙盒,但其他应用程序可以进入你的沙盒,如果它们没有沙盒的话。在你的情况下:当然,如果你给他们文件UR,其他应用程序可以访问该文件。-写保护是不可能的。我认为最好的办法是提供一份临时拷贝。如果你真的使用大文件,而且速度太慢,请显示一个进度“打开…”,谢谢你对沙盒的总结,@AxelZehden。似乎我必须找到一种方法,在不打扰用户的情况下制作一个临时副本。也许我可以找到一种方法,首先显示共享选项,然后在用户选择一个选项时,复制到NSTemporaryDirectory,最后共享此副本。也许书签可以解决您的问题。