【发布时间】:2025-12-18 22:40:01
【问题描述】:
我有一个鞋盒类型(而不是基于文档)的 OS X 应用程序,它将图像存储在应用程序的沙盒容器中。
这些图像可以通过共享扩展(以 NSURL 的形式)共享或通过拖放导出。
当图像被共享到图像编辑器(例如 Acorn 提供共享扩展)或放在图像编辑器上时,图像编辑器会从我的沙箱容器中打开文件 ,现在可以更改、重命名或删除此文件 - 这可能会导致我的应用程序出现各种不稳定因素。
首先,我很惊讶,因为我认为沙盒中的文件只能由应用程序本身访问。但似乎情况并非如此,当我故意分享 NSURL 时。
那么如何防止有人更改我的沙盒容器中的文件,同时仍然提供它们以供拖放和共享扩展?
- 我尝试过不共享 NSURL 而是共享 NSImage,但许多共享扩展程序不适用于 NSImage,所以这不是一个好的选择。
- 是否可以对沙盒中的文件进行写保护?
- 在提供图像以供共享或拖放之前,我是否应该始终将其复制到临时位置(对于大图像可能会很慢?)
我很高兴听到您的建议或了解有关该问题的更多信息。
【问题讨论】:
-
我看到了 2 个选项,但它们的成本很高。 1 - 您可以将其全部放入数据库而不是沙箱,或者 2 - 让您的应用创建原始文件的副本,然后将其交给编辑器...
-
一般情况下:你不能退出你的沙箱,但其他应用程序可以进入你的沙箱,如果它们没有沙箱。在您的情况下:当然,如果您给他们 File-UR,则允许其他应用程序访问该文件。 - 写保护是不可能的。我认为最好的方法是提供临时副本。如果你真的使用大文件而且速度太慢,显示进度“正在打开...”
-
感谢您对沙盒的总结,@AxelZehden。似乎我必须找到一种方法来制作临时副本,而不会过多地打扰用户。也许我可以找到一种方法来首先显示共享选项,然后当用户选择一个时,将副本复制到 NSTemporaryDirectory,最后共享此副本。
-
也许书签可以解决你的问题。
标签: macos cocoa drag-and-drop sandbox appstore-sandbox