Objective c UTI&x27;s和文件扩展名关联

Objective c UTI&x27;s和文件扩展名关联,objective-c,macos,file-type,uti,Objective C,Macos,File Type,Uti,在我的应用程序中,我希望包含一个QuickLook插件,该插件读取其他应用程序也使用的非系统扩展(本例中使用RAR)。我在我的应用程序包的Info.plist中将扩展声明为导出的UTI,如下所示: <key>UTExportedTypeDeclarations</key> <array> <dict> <key>UTTypeConformsTo</key> <array>

在我的应用程序中,我希望包含一个QuickLook插件,该插件读取其他应用程序也使用的非系统扩展(本例中使用RAR)。我在我的应用程序包的Info.plist中将扩展声明为导出的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>

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

这里的一个问题是,您试图将同一扩展与两个不同的UTI关联,而启动服务无法处理这两个UTI。您导入的
com.rarlab.rar归档文件
声明正确,它会按预期将所有
rar
类型的文件分配给
com.rarlab.rar归档文件

您不必要地声明了导出的声明,因为它试图重新定义
rar
扩展。与其这样做,您只需要使用导入的声明,并在QuickLook扩展中使用
com.rarlab rar archive
来声明它可以处理什么

只要另一个应用程序没有声明QuickLook扩展,您就可以声明这个配对并让它工作。然而,因为听起来另一个应用程序已经为这个特定的UTI提供了QuickLook扩展,所以我想你可能不得不选择删除它。我的经验是,冲突的QuickLook扩展是先到先得的

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