您可以动态地将 CFBundleDocumentTypes 分配给您的 Cocoa 应用程序吗?这意味着在运行时我可以为我的应用程序分配更多的扩展来处理。
目前,我为我的应用程序设置了一些扩展,以使用 Info.plist 中的 CFBundleDocumentTypes 来处理,但我想在应用程序执行时(在运行时)通过代码来执行此操作。基本上我可以在不修改 Info.plist 文件的情况下让 Launch Services 了解新的扩展。
谢谢。
您可以动态地将 CFBundleDocumentTypes 分配给您的 Cocoa 应用程序吗?这意味着在运行时我可以为我的应用程序分配更多的扩展来处理。
目前,我为我的应用程序设置了一些扩展,以使用 Info.plist 中的 CFBundleDocumentTypes 来处理,但我想在应用程序执行时(在运行时)通过代码来执行此操作。基本上我可以在不修改 Info.plist 文件的情况下让 Launch Services 了解新的扩展。
谢谢。
目前,没有公共 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。