在 Cocoa 中打开任何文件

Posted

技术标签:

【中文标题】在 Cocoa 中打开任何文件【英文标题】:Open any file in Cocoa 【发布时间】:2011-08-29 18:03:02 【问题描述】:

我的 Cocoa (Mac) 应用程序处理没有​​标准化文件扩展名的文件格式,我从用户那里收到的第一个请求是允许打开具有任何文件扩展名的文件,而不仅仅是一组封闭的我准备的最常见的。

通常,通过声明类处理的 UTI 并根据需要声明导入或导出的 UTI,您可以在 Info.plist 中指定要打开的文件类型。您可以在那里指定与这些 UTI 相关联的文件扩展名列表。扩展名未在此处列出的文件将无法拖放到 Dock 中的应用程序图标中,并且将在“打开文件”对话框中显示为灰色。我似乎无法找到一种方法来覆盖此行为并接受带有任何扩展名的文件。互联网上有各种网站建议将 * 分配给文件扩展名,但这似乎对我不起作用。

Mac App Store 中有许多 Cocoa 应用程序可以做到这一点,其中一些来自 Apple(例如 Xcode),一些由第三方开发人员(TextWrangler)制作,所以我认为必须有一种合法的方式来实现这个。

TLDR:如何在 Cocoa 中接受任何扩展名的文件?

【问题讨论】:

【参考方案1】:

我在我的一个应用程序中进行了此设置。它使用 Info.plist Key 'CFBundleDocumentTypes' 的以下值定义:

    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>*</string>
            </array>
            <key>CFBundleTypeMIMETypes</key>
            <array>
                <string>public.item</string>
            </array>
            <key>CFBundleTypeOSTypes</key>
            <array>
                <string>****</string>
            </array>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>public.item</string>
            </array>
            <key>LSTypeIsPackage</key>
            <false/>
            <key>NSDocumentClass</key>
            <string>MONDocumentClass</string>
        </dict>
    </array>

但您可能需要修改它。

【讨论】:

非常感谢,成功了!为了将来参考,我缺少的一点是在 LSItemContentTypes 列表中我引用了系统预定义的 UTI,这似乎限制了扩展。 在我的信息列表中使用相同的。应用程序显示在除照片之外的所有其他应用程序中。你能帮我解释一下为什么它不存在吗?

以上是关于在 Cocoa 中打开任何文件的主要内容,如果未能解决你的问题,请参考以下文章

在Swift Cocoa App中实现“打开文件”

如何在 Cocoa 应用程序中显示文件列表?

Cocoa File Opened Event - 检测文件是不是被打开

Cocoa:拖放任何文件类型

在 Cocoa 中注册全局文件拖动事件

在 Cocoa 中读取 iOS 上的图片