2011-05-15 140 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擴展先到先得。