Comment puis-je faire reconnaître à OS X de nouvelles extensions de fichiers?

16

Dans Finder.app, vous pouvez appuyer sur Enterpour modifier le nom du fichier ou dossier actuellement sélectionné.

OS X sélectionnera automatiquement uniquement la partie du nom de fichier, pas l'extension:

C'est très utile, car de cette façon, vous pouvez simplement commencer à taper le nouveau nom, sans vous soucier de modifier accidentellement l'extension du fichier.

Cependant, cela ne semble fonctionner que pour les types de fichiers «connus». Si vous l'essayez avec une extension inconnue, le nom de fichier entier (y compris l'extension) est sélectionné:

J'ai essayé de mapper une application qui peut ouvrir tous les .barfichiers via + I→ «Tout changer», mais j'obtiens toujours le comportement décrit ci-dessus.

Où est stockée la liste des types de fichiers «connus»? Existe-t-il un moyen de faire reconnaître à OS X de nouveaux types de fichiers?

Mathias Bynens
la source

Réponses:

7

Ce message SuperUser a fonctionné pour moi:

Vous devez rechercher l'application que vous souhaitez utiliser pour ouvrir ces fichiers et modifier son ensemble. Cliquez avec le bouton droit sur l'application pour gérer ces extensions de fichier et sélectionnez Afficher le contenu du package . Accédez à Contentset modifiez Info.plist. Vous pourriez avoir besoin de l' éditeur de liste de propriétés , qui fait partie des outils de développement d'Apple. Si vous avez de la chance, c'est au format XML. Modifiez ce fichier CFBundleDocumentTypeset ajoutez une entrée pour l'extension souhaitée.

J'ai utilisé TextEdit comme application par défaut pour ouvrir des .barfichiers. La seule chose que j'ai faite différemment a été de changer le XML qui est entré dans TextEdit Info.plistpour:

    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>bar</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>BarDocument</string>
        <key>CFBundleTypeName</key>
        <string>Bar Document</string>
        <key>CFBundleTypeRole</key>
        <string>Document</string>
    </dict>

… Puis j'ai utilisé LSRefresh.app pour actualiser TextEdit dans la base de données des services de lancement. Ensuite, cela a fonctionné comme vous l'avez suggéré, même si cela brisera probablement la signature de code de Textedit (et de toute autre application signée) sur Lion.

binarybob
la source
1
CFBundleTypeExtensionsest 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 .
TachyonVortex
5
Je suis désolé, je dois voter contre car c'est un mauvais conseil. Non seulement il n'est pas judicieux de falsifier un ensemble d'applications (ce qui risque de provoquer des effets secondaires bizarres ou pire), mais cela peut également détruire complètement la copie de l'application. Vous notez que ce processus n'invalide pas la signature de code mais omettez de souligner que sur les versions macOS qui prennent en charge le sandboxing (10.7+), une application en sandbox avec une signature non valide ne peut pas être lancée ou utilisée de quelque manière que ce soit.
Bob
1
@binarybob, ce que je ne comprends pas, c'est pourquoi ne faites-vous pas simplement un clic droit sur le fichier xxx.baret sélectionnez-le open with?
Pacerier
@Bob, qu'est-ce que l'application standboxing?
Pacerier
@Pacerier App sandboxing est une fonctionnalité de sécurité de macOS qui isole complètement les applications du système et les unes des autres, avec une très courte liste de "droits" qui détaille spécifiquement ce que les applications sont autorisées à faire. Cette liste de droits est intégrée dans la signature de code et validée à chaque exécution de l'application, garantissant que les capacités des applications ne peuvent pas être altérées, par accident ou par une attaque. Voir ce document pour une explication technique.
Bob
26

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' lsregisteroutil, 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 lsregisteren 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 KEYpar la clé que vous avez choisie (ou UTExportedTypeDeclarationsou UTImportedTypeDeclarations).
  • Remplacez-le IDENTIFIERpar un identifiant DNS inverse approprié:
    • Exporté - Quelque chose comme com.mycompany.mytype
    • Importé - Pour id Software de » Doom WAD le format, un identifiant approprié seraitcom.idsoftware.wad
  • Remplacez EXTENSIONl'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' -uoption à 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 UTTypeConformsTopropriété sur l'une des UTI existantes.

Par exemple, si votre nouvelle UTI est un type de code source, vous devez définir la UTTypeConformsTopropriété sur public.source-code, afin qu'elle puisse être ouverte par toutes les applications qui peuvent ouvrir public.source-codeou public.plain-textou des public.textfichiers.

TachyonVortex
la source
0

Suivez ces étapes:

  1. Sélectionnez le fichier dont l'extension n'est pas reconnue (par exemple, .txt).

  2. Cliquez avec le bouton droit et sélectionnez Get Infoou utilisez le raccourci clavier Commandipour afficher la fenêtre d'informations.

  3. Cliquez sur l'indicateur de divulgation à côté de Ouvrir avec: pour ouvrir une vue détaillée. Sélectionnez l'application souhaitée dans le menu déroulant. Ceci associera le document à l'application choisie (par exemple TextEdit).

  4. Cliquez sur le bouton Tout changer .... Il affichera d'abord une boîte de dialogue demandant de confirmer votre intention et liera tous les .txtdocuments à ouvrir avec TextEdit, et laissera l'extension non sélectionnée lorsque vous appuierez sur Retour sur le nom du document.

user3127882
la source