UTI和文件扩展名关联
问题描述:
在我的应用程序中,我想包含一个读取非系统扩展的QuickLook插件,其他应用程序也使用它(让我们在此示例中使用RAR)。我宣布扩展为Exported UTI
在我的应用程序包的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>
而且我也适当地导入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
),显示在该列表中呢?我相信这会导致我的快速查看插件无法触发,因为这些文件与UTR的com.another-company.rarx-archive
相关联。我的系统上的其他应用程序是用来代替的。用调试输出运行qlmanage
证明了这一点。
答
这里的一个问题是,您试图将相同的扩展与两个不同的UTI关联,而这些UTI是Launch Services无法处理的。您导入的com.rarlab.rar-archive
声明是正确的,它会按照预期将rar
类型的所有文件分配给com.rarlab.rar-archive
。
您不必要地声明了导出声明,因为它试图重新定义rar
扩展名。您只需要使用Imported声明并在QuickLook扩展中使用com.rarlab-rar-archive
来声明它可以工作的内容,而不是这样做。
只要其他应用程序没有声明QuickLook扩展,您应该很好地声明此配对并使其工作。但是,由于听起来其他应用程序已经具有此特定UTI的QuickLook扩展,因此我认为您可能会选择删除它。我的经验是,冲突的QuickLook扩展先到先得。