cocoa - 允许 bundle /插件添加到 Cocoa 应用程序支持的文档扩展中吗?

标签 cocoa macos document nsdocument

在基于文档的 Cocoa 应用程序中,处理的文件扩展名列在应用程序的 Info.plist 文件中。

我正在构建的应用程序将需要为其打开的每种类型的文件提供一个可加载的包。因此,我希望 bundle 的存在可以修改我的应用程序将自身注册为处理某些文件类型的方式。

举个例子,如果安装了 HTML.bundle,我的应用程序应该允许打开 HTML 文档,但如果该包不存在,则不应打开。

它是否必须是应用程序级别的设置,还是可以通过应用程序的已安装 bundle 进行分发?

我指的是基于文档的应用程序的 Info.plist 中的“文档类型”。

最佳答案

您应该从应用程序内重写 Info.plist 文件:

if (bundle_installed(@"HTML.bundle")) {
    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:PATH_TO_PLIST];

    /* add/remove things to/from dict here */

    [dict writeToFile:PATH_TO_PLIST atomically:YES]; // atomically is important! Must be YES!!
}

这很容易实现,但是,您的应用程序必须重新启动才能完成更改。

<小时/>

您应该将备份 Info.plist 添加到 Resources 目录中,以防出现问题。

关于cocoa - 允许 bundle /插件添加到 Cocoa 应用程序支持的文档扩展中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003506/

相关文章:

objective-c - 从 NSImage 对象获取最高位图表示的最佳方法是什么

objective-c - 如何在我从该控件之一的子类中放置控件的 View 中使用方法

macos - iTerm 2 配置文件

javascript - 在脚本中更改 HTML 中输入框的值

cocoa - "com.apple"自定义文件格式的 UTI

java - 使用文档监听器时如何将文本设置为标题?

database - 使用 Spotlight 作为应用程序的 "database"

cocoa - 使用 NSPredicateEditor,有没有办法免费获得所有 Finder 搜索类别?

macos - 如何设置Docker的系统内存?

cocoa - Mac OS X 上的 Open Directory 目录域名