在我的应用程序中,我想要包含一个QuickLook插件,该插件读取其他应用程序也使用的非系统扩展(让我们在本例中使用RAR)。我在我的应用包的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
可以解决这个问题。
答案 0 :(得分:1)
这里的一个问题是您尝试将相同的扩展名与两个不同的UTI相关联,而Launch Services无法处理这些UTI。导入的com.rarlab.rar-archive
声明是正确的,它会将rar
类型的所有文件分配给com.rarlab.rar-archive
,这与预期的一样。
您已经不必要地声明了Exported声明,因为它尝试重新定义rar
扩展名。您只需要使用Imported声明并使用QuickLook扩展中的com.rarlab-rar-archive
来声明它可以使用的内容,而不是这样做。
只要其他应用程序没有声明QuickLook扩展,您应该很好地声明此配对并让它工作。但是,由于听起来其他应用程序已经为此特定UTI设置了QuickLook扩展,我认为您可能会遇到删除它的选项。我的经验是,相互冲突的QuickLook扩展程序是先到先得的。