0

我有一个基于文档的应用程序,它具有自定义文件格式、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 等示例应用程序列表中复制和粘贴条目,但均无济于事。

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

任何帮助是极大的赞赏。先感谢您。

4

1 回答 1

3

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

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

3)然后您更改了应用程序中的 UTI 设置。

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

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

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

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

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

  • 将您的文档 UTI 类型更改为更特定于您的类型。类似的东西com.mycompany.appname.extension

CFBundleDocumentTypes然后通过删除CFBundleTypeExtensions条目并添加LSItemContentTypes如下内容来更改您的文档条目:

<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文件中的本地化版本覆盖(如果有的话)。

于 2011-06-14T10:10:40.807 回答