2011-05-15 141 views
5

在我的应用程序中,我想包含一个读取非系统扩展的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证明了这一点。

回答

1

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

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

只要其他应用程序没有声明QuickLook扩展,您应该很好地声明此配对并使​​其工作。但是,由于听起来其他应用程序已经具有此特定UTI的QuickLook扩展,因此我认为您可能会选择删除它。我的经验是,冲突的QuickLook扩展先到先得。