2011-05-15 1 views
5

Dans mon application, je voulais inclure un plugin QuickLook qui lit une extension non-système que d'autres applications utilisent également (utilisons RAR pour cet exemple). Je déclare l'extension en tant Exported UTI dans mon Info.plist de paquet d'applications comme ceci:Associations d'UTI et d'extension de fichier

<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> 

Et j'importer aussi de façon appropriée l'UTI RAR: semblent

<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> 

Les fichiers RARX ne jamais obtenir associé à mon application après je l'ai exécuté, cependant. Pour vérifier l'association, je mdls comme ceci:

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

Pourquoi mon infection urinaire (com.my-company.rarx-archive) apparaître dans cette liste? Je crois que cela se traduit par mon plugin Quick Look ne pas tirer, car les fichiers sont associés à l'UTI com.another-company.rarx-archive. L'autre application sur mon système est ce qui est utilisé à la place. L'exécution qlmanage avec la sortie de débogage confirme cela.

Répondre

1

Un problème ici est que vous essayez d'associer la même extension avec deux UTI différentes, que les services de lancement ne peuvent pas gérer. Votre déclaration com.rarlab.rar-archive importée est correcte, et elle affecte tous les fichiers de type rar à com.rarlab.rar-archive comme prévu.

Vous avez déclaré la déclaration Exported inutilement, car elle tente de redéfinir l'extension rar. Au lieu de cela, vous voulez simplement utiliser la déclaration importée et utiliser com.rarlab-rar-archive dans votre extension QuickLook pour déclarer sur quoi elle peut fonctionner.

Tant que l'autre application ne déclare pas une extension QuickLook, vous devez déclarer correctement cette association et la faire fonctionner. Cependant, comme il semble que l'autre application a déjà une extension QuickLook pour cette UTI particulier, je pense que vous pourriez être bloqué avec la possibilité de le supprimer. D'après mon expérience, les extensions QuickLook en conflit sont les suivantes: premier arrivé, premier servi.