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

In Finder.app können Sie auf drücken, Enterum den Namen der aktuell ausgewählten Datei oder des Ordners zu bearbeiten.

OS X wählt automatisch nur den Teil des Dateinamens 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 eine versehentliche Änderung 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 bekomme immer noch das oben beschriebene Verhalten.

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

Antworten (3)

Dieser SuperUser-Beitrag hat bei mir funktioniert:

Sie müssen zu der Anwendung navigieren, die Sie zum Öffnen dieser Dateien verwenden möchten, und ihr Bundle bearbeiten. Klicken Sie mit der rechten Maustaste auf die Anwendung, um diese Dateierweiterungen zu verarbeiten, und wählen Sie Paketinhalt anzeigen aus . Navigieren Sie zu Contentsund bearbeiten Sie Info.plist. Möglicherweise benötigen Sie den Property List Editor , der Teil der Entwicklertools von Apple ist. Wenn Sie Glück haben, ist es im XML-Format. Bearbeiten Sie diese Datei 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 Code-Signatur von Textedit (und jeder anderen signierten Anwendung) auf Lion brechen wird.

CFBundleTypeExtensionsist ein Legacy-Schlüssel, der in OS X 10.5 veraltet ist . Die bevorzugte Methode seit 2007 besteht darin, neue UTIs zu deklarieren, wie hier erwähnt und in meiner Antwort beschrieben .
Es tut mir leid, ich muss das ablehnen, weil dies ein schlechter Rat ist. Es ist nicht nur unklug, ein App-Bundle zu manipulieren (wobei das Risiko von bizarren Nebenwirkungen oder Schlimmerem besteht), sondern es kann auch die Kopie der App vollständig zerstören. Sie stellen fest, dass dieser Prozess die Code-Signatur ungültig macht, weisen aber nicht darauf hin, dass auf 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.
@binarybob, was ich nicht verstehe ist, warum klickst du nicht einfach mit der rechten Maustaste auf die Datei xxx.barund wählst open with?
@Bob, was ist App-Standboxing?
@Pacerier App Sandboxing ist eine Sicherheitsfunktion von macOS, die Apps vollständig vom System und voneinander isoliert, mit einer sehr kurzen Liste von "Berechtigungen", die genau angibt, was Apps tun dürfen. Diese Liste der Berechtigungen ist in die Code-Signatur eingebettet und wird jedes Mal validiert, wenn die App ausgeführt wird, um sicherzustellen, dass die Funktionen der Apps weder versehentlich noch durch einen Angriff manipuliert werden können. Siehe dieses Dokument für eine technische Erklärung.
Lassen Sie mich den Kommentar von @Bob bekräftigen. Seit zumindest macOS Catalina und wahrscheinlich früher, wird das Manipulieren einer Datei in einem Paket (= macOS-App) sofort und unwiderruflich verhindern, dass diese App gestartet wird. Die einzige Möglichkeit, es wiederherzustellen, besteht darin, es von Grund auf neu zu installieren (wobei alle von Ihnen vorgenommenen Änderungen überschrieben werden). Siehe die Antwort von @TachyonVortex für eine kompliziertere, aber sicherere Alternative zu diesem Problem.

UTIs und Startdienste

Wo wird die Liste der „bekannten“ Dateitypen gespeichert?

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

Mit dem Terminal können Sie den Inhalt der Launch Services-Datenbank mit dem lsregisterTool anzeigen, das unter folgender Adresse gespeichert ist:

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

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

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

und dann können Sie ausführen, lsregisterindem Sie einfach 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 „Declaring New Uniform Type Identifiers“ enthält nützliche Informationen dazu. Hier ist der vollständige 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 sein Dateiformat auf Application .

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 Paketinhalt anzeigen aus dem Popup-Menü.
  • Ö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).
  • Ersetzen Sie IDENTIFIERdurch eine geeignete Reverse-DNS-Kennung:
  • Ersetzen Sie EXTENSIONdurch die Dateinamenerweiterung (ohne den führenden Punkt), zB: wad.

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

  • UTTypeConformsTo– Siehe Anhang unten.
  • UTTypeDescription– Eine für den Benutzer sichtbare Beschreibung, die im Finder angezeigt wird.
  • UTTypeIconFile– Wenn Sie eine Apple Icon Image -Datei zum Ordner „ Contents/Resources “ 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, das alle optionalen Eigenschaften zeigt:

<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. B.:

lsregister ~/Desktop/MyDummyApp.app

Wenn Sie jetzt eine Datei mit Ihrer neuen Dateinamenerweiterung erstellen und sie dann im Finder auswählen und auf Enterdrücken, sollte der Finder automatisch nur den Dateinamensteil 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 Ihre neue UTI später abmelden 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: System-Declared Uniform Type Identifiers .

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 public.htmlentspricht die UTI , die HTML-Text definiert, dem Basistextbezeichner public.text. In diesem Fall ermöglicht die Konformität Anwendungen, die allgemeine Textdateien öffnen können, HTML-Dateien als solche zu identifizieren, die sie ebenfalls öffnen können. ( Referenz )

Beim Erstellen einer neuen UTI empfiehlt es sich, die UTTypeConformsToEigenschaft auf eine der vorhandenen UTIs festzulegen.

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

Gibt es eine Möglichkeit, den Editor anzugeben, der der Dateierweiterung zugeordnet ist?
An das OP: Dies sollte als akzeptierter Vorschlag gekennzeichnet werden. Siehe @Bobs Kommentar.
An @gr4nt3d: siehe apple.stackexchange.com/a/323743/27729 unten für das, was Sie tun möchten.

Folge diesen Schritten:

  1. Wählen Sie die Datei mit unbekannter Erweiterung (z . B. .txt).

  2. Klicken Sie mit der rechten Maustaste und wählen Sie Get Infooder verwenden Sie die Tastenkombination Commandi, um das Informationsfenster anzuzeigen.

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

  4. Klicken Sie auf die Schaltfläche Alle ändern.... Es zeigt zunächst ein Dialogfeld an, in dem Sie aufgefordert werden, Ihre Absicht zu bestätigen, und verknüpft alle .txtDokumente, die mit TextEdit geöffnet werden sollen, und lässt die Erweiterung nicht ausgewählt, wenn Sie beim Namen des Dokuments die Eingabetaste drücken.