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

Mic*_*uth 13 macos cocoa info.plist file-association launch-services

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

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

谢谢.

小智 9

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

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

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

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

1但是,通过SPI可能是可能的.当我调查这个时,我偶然发现了_LSRegisterItemFromItemInfo()Launch Services.