Wie kann ich OS X dazu bringen, neue Dateierweiterungen zu erkennen?

16

In Finder.app können Sie Enterden Namen der aktuell ausgewählten Datei oder des aktuell ausgewählten Ordners bearbeiten.

OS X wählt automatisch nur den Dateinamen-Teil aus, nicht die Erweiterung:

Dies ist sehr nützlich, da Sie auf diese Weise einfach mit der Eingabe des neuen Namens beginnen können, ohne sich Gedanken über ein versehentliches Ändern der Dateierweiterung machen zu müssen.

Dies scheint jedoch nur für „bekannte“ Dateitypen zu funktionieren. Wenn Sie es mit einer unbekannten Erweiterung versuchen, wird der gesamte Dateiname (einschließlich der Erweiterung) ausgewählt:

Ich habe versucht, eine Anwendung zuzuordnen, die alle .barDateien über + I→ "Alle ändern" öffnen kann , aber ich erhalte immer noch das oben beschriebene Verhalten.

Wo ist die Liste der "bekannten" Dateitypen gespeichert? Gibt es eine Möglichkeit, OS X dazu zu bringen, neue Dateitypen zu erkennen?

Mathias Bynens
quelle

Antworten:

7

Dieser SuperUser-Beitrag hat für mich funktioniert:

Sie müssen zu der Anwendung navigieren, mit der Sie diese Dateien öffnen möchten, und das Bundle bearbeiten. Klicken Sie mit der rechten Maustaste auf die Anwendung, um diese Dateierweiterungen zu verarbeiten, und wählen Sie Paketinhalt anzeigen . Navigieren Sie zu Contentsund bearbeiten Sie Info.plist. Möglicherweise benötigen Sie den Eigenschaftenlisten-Editor , der Teil der Apple-Entwicklertools ist. Wenn Sie Glück haben, ist es im XML-Format. Bearbeiten Sie diese Dateien CFBundleDocumentTypesund fügen Sie einen Eintrag für die gewünschte Erweiterung hinzu.

Ich habe TextEdit als Standardanwendung zum Öffnen von .barDateien verwendet. Das einzige, was ich anders gemacht habe, war, das XML in TextEdit Info.plistzu ändern :

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

… Und dann habe ich LSRefresh.app verwendet , um TextEdit in der Launch Services-Datenbank zu aktualisieren . Dann hat es wie von Ihnen vorgeschlagen funktioniert, obwohl es wahrscheinlich die Codesignatur von Textedit (und jeder anderen signierten Anwendung) auf Lion beschädigen wird.

Binärbob
quelle
1
CFBundleTypeExtensionsist ein Legacy-Schlüssel, der in OS X 10.5 veraltet ist . Die bevorzugte Methode seit 2007 ist die Deklaration neuer HWI, wie hier erwähnt und in meiner Antwort beschrieben .
TachyonVortex
5
Es tut mir leid, ich muss das ablehnen, weil dies ein schlechter Rat ist. Es ist nicht nur unklug, ein App-Bundle zu manipulieren (mit dem Risiko bizarrer oder schlimmerer Nebenwirkungen), sondern es kann auch die Kopie der App vollständig zerstören. Sie stellen fest, dass dieser Prozess die Codesignatur ungültig macht, weisen jedoch nicht darauf hin, dass in MacOS-Versionen, die Sandboxing (10.7+) unterstützen, eine Sandbox-App mit einer ungültigen Signatur nicht gestartet oder in irgendeiner Weise verwendet werden kann.
Bob
1
@binarybob, Was ich nicht verstehe ist, warum klickst du nicht einfach mit der rechten Maustaste auf die Datei xxx.barund wählst sie aus open with?
Pacerier
@ Bob, Was ist App Standboxing?
Pacerier
@Pacerier App Sandboxing ist eine Sicherheitsfunktion von macOS, die Apps vollständig vom System und voneinander isoliert. Es enthält eine sehr kurze Liste von "Berechtigungen", in denen genau angegeben ist, welche Apps ausgeführt werden dürfen. Diese Liste von Berechtigungen ist in die Codesignatur eingebettet und wird bei jeder Ausführung der App überprüft, um sicherzustellen, dass die Funktionen von Apps weder versehentlich noch durch einen Angriff beeinträchtigt werden können. In diesem Dokument finden Sie eine technische Erklärung.
Bob
26

UTIs und Launch Services

Wo ist die Liste der "bekannten" Dateitypen gespeichert?

Der offizielle Begriff für "Dateitypen" lautet " Uniform Type Identifiers" (UTIs), und die Datenbank der UTIs wird von Launch Services verwaltet .

Über das Terminal können Sie den Inhalt der Launch Services-Datenbank mit dem folgenden lsregisterTool anzeigen :

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister

Anstatt diesen langen Pfad jedes Mal anzugeben, wenn Sie ihn ausführen möchten lsregister, können Sie sein Verzeichnis vorübergehend zu Ihrem Verzeichnis hinzufügen PATH:

PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"

und dann können Sie laufen, lsregisterindem Sie einfach Folgendes eingeben:

lsregister

So zeigen Sie den Inhalt der Launch Services-Datenbank an:

lsregister -dump

Neue HWI deklarieren

Gibt es eine Möglichkeit, OS X dazu zu bringen, neue Dateitypen zu erkennen?

Dieser Apple-Artikel "Deklarieren neuer einheitlicher Typkennungen" enthält nützliche Informationen dazu. Hier ist der gesamte Prozess:

1. Erstellen Sie eine Dummy-Anwendung

Erstellen Sie eine Dummy-Anwendung, um sich bei Launch Services zu registrieren:

  • Öffnen Sie den AppleScript-Editor (im Ordner " Dienstprogramme" von OS X ).
  • Speichern Sie ein neues leeres Skript irgendwo (z. B. auf Ihrem Desktop) und setzen Sie das Dateiformat auf Anwendung .

2. Öffnen Sie die Datei Info.plist

  • Suchen Sie Ihre neue Dummy-Anwendung im Finder.
  • Klicken Sie mit der rechten Maustaste darauf und wählen Sie im Popup-Menü die Option Paketinhalt anzeigen.
  • Öffnen Sie den Inhaltsordner .
  • Öffnen Sie die Datei Info.plist in einem Texteditor (zB: TextEdit ).

3. Fügen Sie Ihre neue UTI hinzu

Es stehen zwei Schlüssel zur Auswahl:

  • UTExportedTypeDeclarations - für Ihre eigenen benutzerdefinierten Dateinamenerweiterungen.
  • UTImportedTypeDeclarations - für Dateinamenerweiterungen, die bereits vorhanden sind, aber von OS X nicht erkannt werden.

Wählen Sie den Schlüssel, der Ihren Anforderungen am besten entspricht.

Fügen Sie dann in der Datei Info.plist vor den letzten beiden Zeilen ( </dict></plist>) diesen Code hinzu:

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

Folgende Änderungen vornehmen:

  • Ersetzen Sie KEYdurch den von Ihnen gewählten Schlüssel (entweder UTExportedTypeDeclarationsoder UTImportedTypeDeclarations).
  • Durch IDENTIFIEReine geeignete Reverse-DNS-Kennung ersetzen :
    • Exportiert - so etwas wie com.mycompany.mytype
    • Importiert - Für das Doom WAD- Format von id Software wäre eine geeignete Kennungcom.idsoftware.wad
  • Ersetzen Sie EXTENSIONdurch die Dateinamenerweiterung (ohne den führenden Punkt), z wad.

Dies ist der Mindestcode, den Launch Services benötigt, um Ihre neue UTI zu akzeptieren. Sie können auch die folgenden optionalen Eigenschaften hinzufügen:

  • UTTypeConformsTo - Siehe Anhang unten.
  • UTTypeDescription - Eine vom Benutzer sichtbare Beschreibung, die im Finder angezeigt wird.
  • UTTypeIconFile- Wenn Sie eine Apple Icon Image- Datei zum Ordner " Inhalt / Ressourcen " in Ihrer Dummy-Anwendung hinzufügen und ihren Dateinamen in dieser Eigenschaft hinzufügen, verwenden Dateien mit Ihrer neuen Dateinamenerweiterung dieses Symbol.
  • UTTypeReferenceURL - Die URL eines Referenzdokuments, das diesen Typ beschreibt.

Hier ist ein vollständiges Beispiel mit allen optionalen Eigenschaften:

<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. Registrieren Sie Ihre neue UTI bei Launch Services

Führen Sie diesen Befehl im Terminal aus:

lsregister <PATH_TO_APP>

Ersetzen <PATH_TO_APP>durch den Pfad zu Ihrer Dummy-Anwendung, z.

lsregister ~/Desktop/MyDummyApp.app

Wenn Sie jetzt eine Datei mit Ihrer neuen Dateinamenerweiterung erstellen und diese dann im Finder auswählen und drücken Enter, sollte der Finder automatisch nur den Dateinamen-Teil auswählen, nicht die Erweiterung.

Wenn Sie den Inhalt der Launch Services-Datenbank anzeigen:

lsregister -dump

Sie sollten Ihre neue UTI aufgelistet finden:

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

Wenn Sie später die Registrierung Ihrer neuen UTI aufheben möchten, übergeben Sie die -uOption an lsregister:

lsregister -u ~/Desktop/MyDummyApp.app

Anhang: UTI-Hierarchie und Konformität

OS X deklariert eine Hierarchie von UTIs, die hier aufgelistet sind: Systemdeklarierte einheitliche Typkennungen .

Hier sind einige UTIs in der Hierarchie:

  • 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

Jede UTI "entspricht" ihrer übergeordneten UTI:

Beispielsweise entspricht die UTI public.html, die HTML-Text definiert , der Basistext- ID public.text. In diesem Fall können Anwendungen, die allgemeine Textdateien öffnen können, durch Konformität HTML-Dateien als solche identifizieren, die sie auch öffnen können. ( ref )

Wenn Sie eine neue UTI erstellen, UTTypeConformsToempfiehlt es sich, die Eigenschaft auf eine der vorhandenen UTIs festzulegen.

Wenn Ihre neue UTI beispielsweise eine Art Quellcode ist, sollten Sie die UTTypeConformsToEigenschaft auf festlegen public.source-code, damit sie von allen Anwendungen geöffnet werden kann, die public.source-codeoder public.plain-textoder public.textDateien öffnen können.

TachyonVortex
quelle
0

Folge diesen Schritten:

  1. Wählen Sie die Datei mit der nicht erkannten Erweiterung aus (z. B. .txt).

  2. Klicken Sie Get Infomit der rechten Maustaste und wählen Sie die Tastenkombination aus oder verwenden Sie sie Commandi, um das Informationsfenster anzuzeigen.

  3. Klicken Sie neben Öffnen mit: auf den Offenlegungsindikator , um die Detailansicht zu öffnen. Wählen Sie die gewünschte App aus der Dropdown-Liste. Dadurch wird das Dokument der ausgewählten Anwendung zugeordnet (z. B. TextEdit).

  4. Klicken Sie auf die Schaltfläche Alle ändern ... Es wird zunächst ein Dialogfeld angezeigt, in dem Sie aufgefordert werden, Ihre Absicht zu bestätigen, und alle .txtzu öffnenden Dokumente mit TextEdit verknüpft. Die Erweiterung wird nicht ausgewählt, wenn Sie die Eingabetaste für den Namen des Dokuments drücken.

user3127882
quelle