你能动态地将CFBundleDocumentTypes分配给你的Cocoa应用程序吗?

时间:2011-12-17 01:56:57

标签: macos cocoa file-association info.plist launch-services

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

目前我为我的应用程序设置了一些扩展,以便在Info.plist中使用CFBundleDocumentTypes来处理,但是我希望在应用程序执行时(在运行时)执行此操作。基本上,我可以让Launch Services知道新扩展,而无需修改Info.plist文件。

感谢。

1 个答案:

答案 0 :(得分:9)

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

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

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

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

1 虽然可能通过SPI实现。当我调查这个时,我在Launch Services中偶然发现了_LSRegisterItemFromItemInfo()