我有一个沙盒应用程序,它使用可以包含嵌入文件名的文档格式。例如,这些参考文件中的一些用于用户选择的图像文件,以便将图像文件与存储在文档中的数据相关联。虽然此类图像有时会位于用户图片文件夹中,但有时它们会位于其他位置。出于可移植性原因,文档格式本身无法更改(与现有 Windows 版本的应用程序共享)。
为了让应用程序能够访问其名称嵌入在文档中的文件,当用户选择一个文件名(使用 nsopenpanel)以像这样存储在文档中时,应用程序还会创建一个应用程序范围的安全范围书签对于每个这样的存储文件名。然后它通过将这些书签序列化到另一个文件来存储它们。当应用程序再次运行时,它会加载其先前序列化的书签并在访问“嵌入”文件名时使用它们,并且工作正常。
但是,当我将这样的文档(及其相关的序列化书签文件)从一台 Mac 复制到另一台 Mac 时,它不起作用,即使已知书签引用的所有文件都存在于两台 Mac 上。发生的情况是,虽然应用程序可以正常打开文档文件(在用户使用 nsopenpanel 选择它之后),并从其关联的序列化书签文件(用户再次使用 nsopenpanel 选择)中成功读取序列化书签,即使已知书签所指的完全相同的文件名存在于另一台 Mac 上(用户可以通过 finder 等访问),但沙盒应用程序仍然无法访问它们。解析书签似乎失败了。
问题是:应用范围内的书签是否仅限于在创建它们的 Mac 上工作?如果我无法将应用程序范围的书签从一个系统移动到另一个系统,那么在不强制用户必须手动重新选择每个使用 nsopenpanel 的“嵌入”文件名的情况下,我还能如何实现我想要的效果?
试图在 Apple 文档中找到这个问题的答案,但没有成功。
我认为毫无疑问,安全范围的书签只能由创建它们的应用程序使用。