您可以动态地将CFBundleDocumentTypes分配给您的Cocoa应用程序吗?运行时的含义可以为我的应用分配更多扩展名来处理。
目前我为我的应用程序设置了一些扩展,以便在Info.plist中使用CFBundleDocumentTypes来处理,但是我希望在应用程序执行时(在运行时)执行此操作。基本上,我可以让Launch Services知道新扩展,而无需修改Info.plist文件。
感谢。
答案 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()
。