【问题标题】:Can you dynamically assign CFBundleDocumentTypes to your Cocoa application?你能动态地将 CFBundleDocumentTypes 分配给你的 Cocoa 应用程序吗?
【发布时间】:2012-01-22 10:38:40
【问题描述】:

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      相关资源
      最近更新 更多