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 lsregister
Tool 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, lsregister
indem 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
KEY
durch den von Ihnen gewählten Schlüssel (entweder UTExportedTypeDeclarations
oder UTImportedTypeDeclarations
).
- Durch
IDENTIFIER
eine 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 Kennung
com.idsoftware.wad
- Ersetzen Sie
EXTENSION
durch 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 -u
Option 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, UTTypeConformsTo
empfiehlt es sich, die Eigenschaft auf eine der vorhandenen UTIs festzulegen.
Wenn Ihre neue UTI beispielsweise eine Art Quellcode ist, sollten Sie die UTTypeConformsTo
Eigenschaft auf festlegen public.source-code
, damit sie von allen Anwendungen geöffnet werden kann, die public.source-code
oder public.plain-text
oder public.text
Dateien öffnen
können.
CFBundleTypeExtensions
ist 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 .