13

您可以动态地将 CFBundleDocumentTypes 分配给您的 Cocoa 应用程序吗?这意味着在运行时我可以为我的应用程序分配更多的扩展来处理。

目前,我为我的应用程序设置了一些扩展,以使用 Info.plist 中的 CFBundleDocumentTypes 来处理,但我想在应用程序执行时(在运行时)通过代码来执行此操作。基本上我可以在不修改 Info.plist 文件的情况下让 Launch Services 了解新的扩展。

谢谢。

4

1 回答 1

9

目前,没有公共 API 1可供应用程序在运行时动态(取消)注册文档类型到 Launch Services。

Open Emu 正面临着这个问题。用户可以有选择地下载/安装模拟器,这些模拟器是 Info.plist 文件定义文档类型的捆绑包。安装模拟器后,bundle 中定义的类型需要是应用程序Info.plist 中定义的类型的一部分。Open Emu 会重写应用程序 Info.plist 以执行此操作 - 请参阅OEGameDocumentController 中的 -updateInfoPlist

请注意,覆盖捆绑包 Info.plist 违反了 Mac App Store 的政策。

我们已提交雷达,要求对文档类型进行运行时(取消)注册。我建议您也提交另一个文件,该文件应作为#2526726的副本关闭。即使它是重复的,重要的是无论如何都要提交它,以便 Apple 估计需要此功能的人数。

1不过,它可能通过 SPI 实现。当我研究这个时,我偶然发现了_LSRegisterItemFromItemInfo()Launch Services。

于 2011-12-22T09:22:06.567 回答