UTI et services de lancement
Où est stockée la liste des types de fichiers «connus»?
Le terme officiel pour «types de fichiers» est «
Uniform Type Identifiers»
(UTI) et la base de données des UTI est gérée par
Launch Services .
À l'aide du terminal , vous pouvez afficher le contenu de la base de données Launch Services à l'aide de l' lsregister
outil, qui est stocké dans:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
Au lieu de spécifier ce long chemin à chaque fois que vous souhaitez exécuter lsregister
, vous pouvez ajouter temporairement son répertoire à votre PATH
:
PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"
puis vous pouvez exécuter lsregister
en entrant simplement:
lsregister
Pour afficher le contenu de la base de données Launch Services:
lsregister -dump
Déclarer de nouvelles UTI
Existe-t-il un moyen de faire reconnaître à OS X de nouveaux types de fichiers?
Cet article d'Apple,
«Déclarer de nouveaux identificateurs de type uniforme» , fournit des informations utiles sur la façon de procéder. Voici le processus complet:
1. Créez une application factice
Créez une application factice pour vous inscrire aux services de lancement:
- Ouvrez l' éditeur AppleScript (situé dans le dossier Utilitaires d' OS X ).
- Enregistrez un nouveau script vide quelque part (par exemple: sur votre bureau), en définissant son format de fichier sur Application .
2. Ouvrez son fichier Info.plist
- Localisez votre nouvelle application factice dans le Finder.
- Faites un clic droit dessus et sélectionnez Afficher le contenu du package dans le menu contextuel.
- Ouvrez son dossier Contenu .
- Ouvrez le fichier Info.plist dans un éditeur de texte (par exemple: TextEdit ).
3. Ajoutez votre nouvelle UTI
Il y a un choix de deux clés:
UTExportedTypeDeclarations
- pour vos propres extensions de nom de fichier personnalisées.
UTImportedTypeDeclarations
- pour les extensions de nom de fichier qui existent déjà mais ne sont pas reconnues par OS X.
Choisissez la clé qui convient le mieux à vos besoins.
Ensuite, dans le fichier Info.plist , avant les deux dernières lignes ( </dict></plist>
), ajoutez ce code:
<key>KEY</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>IDENTIFIER</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>EXTENSION</string>
</array>
</dict>
</dict>
</array>
apportant les modifications suivantes:
- Remplacez-la
KEY
par la clé que vous avez choisie (ou UTExportedTypeDeclarations
ou UTImportedTypeDeclarations
).
- Remplacez-le
IDENTIFIER
par un identifiant DNS inverse approprié:
- Exporté - Quelque chose comme
com.mycompany.mytype
- Importé - Pour id Software de »
Doom WAD le format, un identifiant approprié serait
com.idsoftware.wad
- Remplacez
EXTENSION
l'extension de nom de fichier (sans le point d' attaque), par exemple: wad
.
Il s'agit du code minimum nécessaire pour que Launch Services accepte votre nouvelle UTI. Vous pouvez également ajouter les propriétés facultatives suivantes:
UTTypeConformsTo
- Voir l'annexe ci-dessous.
UTTypeDescription
- Une description visible par l'utilisateur, qui sera affichée dans le Finder.
UTTypeIconFile
- Si vous ajoutez un
fichier Apple Icon Image au dossier Contents / Resources de votre application factice et ajoutez son nom de fichier dans cette propriété, les fichiers qui ont votre nouvelle extension de nom de fichier utiliseront cette icône.
UTTypeReferenceURL
- L'URL d'un document de référence décrivant ce type.
Voici un exemple complet montrant toutes les propriétés facultatives:
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>com.idsoftware.wad</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>wad</string>
</array>
</dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>Doom WAD file</string>
<key>UTTypeIconFile</key>
<string>DoomWAD.icns</string>
<key>UTTypeReferenceURL</key>
<string>http://en.wikipedia.org/wiki/Doom_WAD</string>
</dict>
</array>
4. Enregistrez votre nouvelle UTI avec Launch Services
Exécutez cette commande dans le terminal:
lsregister <PATH_TO_APP>
remplacer <PATH_TO_APP>
par le chemin d'accès à votre application factice, par exemple:
lsregister ~/Desktop/MyDummyApp.app
Si vous créez maintenant un fichier avec votre nouvelle extension de nom de fichier, puis sélectionnez-le dans le Finder et appuyez sur Enter, le Finder doit sélectionner automatiquement uniquement la partie du nom de fichier, pas l'extension.
Si vous affichez le contenu de la base de données Launch Services:
lsregister -dump
vous devriez trouver votre nouvelle UTI dans la liste:
type id: 50364
bindableKey: 12608
generation: 1
uti: com.idsoftware.wad
description: Doom WAD file
flags: imported active apple-internal untrusted
icon: DoomWAD.icns
conforms to: public.data
tags: .wad
Si vous souhaitez ultérieurement désinscrire votre nouvelle UTI, passez l' -u
option à lsregister
:
lsregister -u ~/Desktop/MyDummyApp.app
Annexe: Hiérarchie UTI et conformité
OS X déclare une hiérarchie d'UTI qui sont répertoriés ici:
Identificateurs de type uniforme déclarés par le système .
Voici quelques UTI dans la hiérarchie:
public.content
public.text
public.rtf
public.html
public.xml
public.plain-text
public.source-code
public.c-source
public.c-header
com.sun.java-source
public.image
public.jpeg
public.tiff
public.png
public.audiovisual-content
public.movie
public.audio
Chaque UTI "est conforme" à son UTI parent:
Par exemple, l'UTI public.html
, qui définit le texte HTML, est conforme à l'identificateur de texte de base, public.text
. Dans ce cas, la conformité permet aux applications qui peuvent ouvrir des fichiers texte généraux d'identifier les fichiers HTML comme ceux qu'ils peuvent également ouvrir. ( ref )
Lors de la création d'une nouvelle UTI, il est judicieux de définir la UTTypeConformsTo
propriété sur l'une des UTI existantes.
Par exemple, si votre nouvelle UTI est un type de code source, vous devez définir la UTTypeConformsTo
propriété sur public.source-code
, afin qu'elle puisse être ouverte par toutes les applications qui peuvent ouvrir
public.source-code
ou public.plain-text
ou des public.text
fichiers.
CFBundleTypeExtensions
est une clé héritée devenue obsolète dans OS X 10.5 . La méthode préférée depuis 2007 est de déclarer de nouvelles UTI, comme mentionné ici et décrit dans ma réponse .