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

标签 cocoa plist document quicklook uti

我有一个基于文档的应用程序,具有自定义文件格式、UTI 等设置:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>extension</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>Icon</string>
        <key>CFBundleTypeName</key>
        <string>Custom Document</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Default</string>
        <key>NSDocumentClass</key>
        <string>MyDocument</string>
    </dict>
</array>

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Custom Document</string>
        <key>UTTypeIconFile</key>
        <string>Icon</string>
        <key>UTTypeIdentifier</key>
        <string>com.mycompany.appname</string>
        <key>UTTypeReferenceURL</key>
        <string></string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>com.apple.ostype</key>
            <string>XXXX</string>
            <key>public.filename-extension</key>
            <array>
                <string>extension</string>
            </array>
        </dict>
    </dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array/>

(我认为,根据我所读到的内容)是正确的方法。 除了,当我对任何保存的文件运行 mdls 时,UTI 列出为:

kMDItemContentType             = "com.apple.appname.document"

这很令人困惑,因为我已经从 TextEdit、iSpend 和 Sketch 等示例应用程序的 plist 中复制并粘贴了条目,但都无济于事。

保存的文档具有正确的 UTI 尤其重要,因为它们需要自定义的 QuickLook 生成器,而该生成器依赖于正确的 UTI。

非常感谢任何帮助。 预先感谢您。

最佳答案

您是否曾经做过以下事情:

1) 在某个时刻,将 com.apple.appname.document 作为您的 UTI 类型,并且当时您在文件系统中创建了您类型的自定义文档。

3) 然后您在应用中更改了 UTI 设置。

4) 您正在查看在步骤 1 中创建的文件的信息,并且该文件自创建以来未曾更改?

如果是这样,请尝试使用终端触摸有问题的文件以强制对其进行 Spotlight 重新索引,然后再看一下。

否则,确保删除应用程序的所有无关副本,然后重建启动服务数据库也可能会有所帮助(您可以使用我编写的实用程序来执行此操作:Rebuild Launch Services Database

一般来说,您的 Info.plist 信息没问题,但我会推荐以下内容:

  • UTTypeTagSpecification 下的 UTExportedTypeDeclarations 中,如果您确实知道自己在做什么,则仅指定 OSType(文件类型代码)。这意味着您当然不会使用像 'appe' 这样全是小写字母的类型,因为这些是为 Apple 保留的。我知道您需要向 Apple 注册创建者代码 (CFBundleSignatures)(我自己已经注册了几个),但我不确定文件类型以及他们是否仍在这样做或不是。如果您指定一些任意文件类型代码,并且不了解过去 30 年中实际使用的代码,则可能会与现有定义的类型发生冲突。

  • 更改文档 UTI 类型,使其更适合您的类型。类似于 com.mycompany.appname.extension

然后通过删除 CFBundleTypeExtensions 条目并添加 LSItemContentTypes 来更改文档 CFBundleDocumentTypes 条目,如下所示:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>LSItemContentTypes</key>
        <array>
              <string>com.mycompany.appname.extension</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>Icon</string>
        <key>CFBundleTypeName</key>
        <string>Custom Document</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Default</string>
        <key>NSDocumentClass</key>
        <string>MyDocument</string>
    </dict>
</array>

然后,最后检查 Info.plist 中的任何键是否没有被 InfoPlist.strings 文件中的本地化版本覆盖(如果有的话)。

关于cocoa - "com.apple"自定义文件格式的 UTI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6339456/

相关文章:

cocoa - 如何在 cocoa 中使用拉伸(stretch)来调整 NSImage 的大小

iphone - 我想在 iTunes Connect 中将我的通用应用程序更新为仅限 iPad 的应用程序。但是在提交二进制文件时出现以下错误

ios - 每个方案的多个 Info.plist 文件之间有一个不同的 key ?

document - 如何更新嵌入式文件?

objective-c - 如何在同一个界面上使用两个 NStableview?

macos - cocoa 应用程序会自行删除

cocoa - NSTask plutil 无法识别的选项

macos - launchd 文件手动运行但不会自动运行

r - 使用r包 'flextable'将多个表格导出到word文档

java - 使用 document.parse(string) 时获取 SAXException