UTI i usługi uruchamiania
Gdzie przechowywana jest lista „znanych” typów plików?
Oficjalny termin „typy plików” to
Uniform Type Identifiers
(UTI), a baza danych UTI jest prowadzona przez
Launch Services .
Za pomocą terminalu możesz przeglądać zawartość bazy danych Launch Services za pomocą lsregister
narzędzia, które jest przechowywane w:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
Zamiast określać tę długą ścieżkę za każdym razem, gdy chcesz uruchomić lsregister
, możesz tymczasowo dodać jej katalog do PATH
:
PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"
a następnie możesz uruchomić lsregister
, wpisując:
lsregister
Aby wyświetlić zawartość bazy danych Launch Services:
lsregister -dump
Deklarowanie nowych UTI
Czy istnieje sposób, aby OS X rozpoznał nowe typy plików?
W tym artykule Apple
„Deklarowanie nowych jednolitych identyfikatorów typów” podano przydatne informacje, jak to zrobić. Oto kompletny proces:
1. Utwórz aplikację zastępczą
Utwórz aplikację zastępczą, aby zarejestrować się w Launch Services:
- Otwórz AppleScript Editor (znajduje się w folderze Narzędzia OS X ).
- Zapisz gdzieś nowy pusty skrypt (np. Na pulpicie), ustawiając jego format pliku na Application .
2. Otwórz plik Info.plist
- Znajdź swoją nową aplikację pozorną w Finderze.
- Kliknij go prawym przyciskiem myszy i wybierz opcję Pokaż zawartość opakowania z menu podręcznego.
- Otwórz folder Contents .
- Otwórz plik Info.plist w edytorze tekstu (np .: TextEdit ).
3. Dodaj nową UTI
Do wyboru są dwa klucze:
UTExportedTypeDeclarations
- dla własnych niestandardowych rozszerzeń plików.
UTImportedTypeDeclarations
- dla rozszerzeń plików, które już istnieją, ale nie są rozpoznawane przez OS X.
Wybierz klucz, który najlepiej odpowiada Twoim potrzebom.
Następnie w pliku Info.plist , przed ostatnimi dwoma liniami ( </dict></plist>
), dodaj ten kod:
<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>
wprowadzanie następujących zmian:
- Zamień
KEY
na wybrany klucz (albo UTExportedTypeDeclarations
lub UTImportedTypeDeclarations
).
- Zamień
IDENTIFIER
na odpowiedni identyfikator odwrotnego DNS:
- Wyeksportowane - coś podobnego
com.mycompany.mytype
- Importowane - dla id Software „s
Doom WAD formacie, odpowiedni identyfikator byłoby
com.idsoftware.wad
- Zamień
EXTENSION
na rozszerzenie nazwy pliku (bez kropki), np wad
. : .
Jest to minimalny kod niezbędny do uruchomienia nowych usług UTI przez usługi uruchamiania. Możesz także dodać następujące opcjonalne właściwości:
UTTypeConformsTo
- Zobacz załącznik poniżej.
UTTypeDescription
- Widoczny dla użytkownika opis, który zostanie wyświetlony w Finderze.
UTTypeIconFile
- Jeśli dodasz plik Apple Icon Image
do folderu Contents / Resources w aplikacji fikcyjnej i dodasz jego nazwę pliku do tej właściwości, pliki z nowym rozszerzeniem nazwy pliku będą używać tej ikony.
UTTypeReferenceURL
- Adres URL dokumentu referencyjnego opisującego ten typ.
Oto kompletny przykład pokazujący wszystkie opcjonalne właściwości:
<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. Zarejestruj nowe UTI w Launch Services
Uruchom to polecenie w terminalu:
lsregister <PATH_TO_APP>
zamieniając <PATH_TO_APP>
na ścieżkę do aplikacji zastępczej, np .:
lsregister ~/Desktop/MyDummyApp.app
Jeśli teraz utworzysz plik z nowym rozszerzeniem nazwy pliku, a następnie wybierzesz go w Finderze i naciśniesz Enter, Finder powinien automatycznie wybrać tylko część nazwy pliku, a nie rozszerzenie.
Jeśli przeglądasz zawartość bazy danych Launch Services:
lsregister -dump
powinieneś znaleźć swoje nowe UTI na liście:
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
Jeśli później chcesz wyrejestrować nowy interfejs użytkownika, przekaż -u
opcję lsregister
:
lsregister -u ~/Desktop/MyDummyApp.app
Dodatek: Hierarchia i zgodność UTI
OS X deklaruje hierarchię UTI wymienionych tutaj:
Deklarowane przez system jednolite identyfikatory typu .
Oto kilka interfejsów użytkownika w hierarchii:
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
Każde UTI „odpowiada” jego macierzystemu UTI:
Na przykład, UTI public.html
, który definiuje tekst HTML, jest zgodny z identyfikatorem tekstu bazowego public.text
. W takim przypadku zgodność pozwala aplikacjom, które potrafią otwierać ogólne pliki tekstowe, identyfikować pliki HTML jako te, które można również otworzyć. ( ref )
Podczas tworzenia nowego interfejsu użytkownika dobrym pomysłem jest ustawienie tej UTTypeConformsTo
właściwości na jedną z istniejących interfejsów użytkownika.
Na przykład, jeśli nowy UTI jest rodzajem kodu źródłowego, a następnie należy ustawić UTTypeConformsTo
właściwość public.source-code
, dzięki czemu można go otworzyć za pomocą wszelkich aplikacji, które można otwierać
public.source-code
lub public.plain-text
lub public.text
plików.
CFBundleTypeExtensions
jest starszym kluczem, który stał się przestarzały w OS X 10.5 . Preferowaną metodą od 2007 roku jest deklarowanie nowych UTI, jak wspomniano tutaj i opisano w mojej odpowiedzi .