【问题标题】:UTI's and File Extension associationsUTI 和文件扩展名关联
【发布时间】:2011-05-15 15:16:00
【问题描述】:

在我的应用程序中,我想包含一个 QuickLook 插件,该插件可以读取其他应用程序也使用的非系统扩展(让我们在此示例中使用 RAR)。我在我的 app bundle 的 Info.plist 中将扩展声明为 Exported UTI,如下所示:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
            <string>public.archive</string>
            <string>com.rarlab.rar-archive</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Custom RAR Archive</string>
        <key>UTTypeIdentifier</key>
        <string>com.my-company.rarx-archive</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>rarx</string>
            </array>
        </dict>
    </dict>
</array>

而且我还适当地导入了 RAR UTI:

<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
            <string>public.archive</string>
        </array>
        <key>UTTypeDescription</key>
        <string>RAR Archive</string>
        <key>UTTypeIconFile</key>
        <string>RAR</string>
        <key>UTTypeIdentifier</key>
        <string>com.rarlab.rar-archive</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>rar</string>
                <string>rarx</string>
            </array>
        </dict>
    </dict>
</array>

不过,RARX 文件在我运行后似乎从未与我的应用程序关联。为了检查关联,我使用了mdls,如下所示:

mdls -name kMDItemContentTypeTree "/Users/Me/.../A File.rarx"
>>> kMDItemContentTypeTree = (
    "com.another-company.rarx-archive",
    "public.data",
    "public.item",
    "public.archive"
)

为什么我的 UTI (com.my-company.rarx-archive) 没有出现在该列表中?我相信这会导致我的 Quick Look 插件无法触发,因为这些文件与 com.another-company.rarx-archive UTI 相关联。我系统上的另一个应用程序被用来代替。运行带有调试输出的 qlmanage 可以证明这一点。

【问题讨论】:

    标签: objective-c macos file-type uti


    【解决方案1】:

    这里的一个问题是您试图将同一个扩展与两个不同的 UTI 相关联,这是 Launch Services 无法处理的。您导入的com.rarlab.rar-archive 声明是正确的,它会将rar 类型的所有文件分配给com.rarlab.rar-archive,正如预期的那样。

    您不必要地声明了 Exported 声明,因为它试图重新定义 rar 扩展。而不是这样做,您只想使用 Imported 声明并在 QuickLook 扩展中使用 com.rarlab-rar-archive 来声明它可以处理的内容。

    只要其他应用程序没有声明 QuickLook 扩展,您应该可以声明此配对并让它工作。但是,由于听起来其他应用程序已经为这个特定的 UTI 提供了 QuickLook 扩展,我认为您可能会选择删除它。我的经验是,冲突的 QuickLook 扩展是先到先得的。

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2016-06-05
      相关资源
      最近更新 更多