UTI e servizi di lancio
Dove è memorizzato l'elenco dei tipi di file "noti"?
Il termine ufficiale per "tipi di file" è
Uniform Type Identifier
(UTI) e il database degli UTI è gestito da
Launch Services .
Utilizzando il Terminale , è possibile visualizzare i contenuti del database di Servizi di avvio utilizzando lo lsregister
strumento, che è archiviato in:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
Invece di specificare quel percorso lungo ogni volta che si desidera eseguire lsregister
, è possibile aggiungere temporaneamente la sua directory a PATH
:
PATH=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support:"$PATH"
e quindi puoi eseguire lsregister
semplicemente inserendo:
lsregister
Per visualizzare il contenuto del database di Launch Services:
lsregister -dump
Dichiarazione di nuove UTI
C'è un modo per far riconoscere a OS X nuovi tipi di file?
Questo articolo di Apple,
"Dichiarazione di nuovi identificatori di tipo uniforme" , fornisce informazioni utili su come eseguire questa operazione. Ecco il processo completo:
1. Creare un'applicazione fittizia
Crea un'applicazione fittizia per registrarti con Launch Services:
- Apri AppleScript Editor (che si trova nella cartella Utilities di OS X ).
- Salvare un nuovo script vuoto da qualche parte (ad es .: sul desktop), impostando il formato file su Applicazione .
2. Apri il suo file Info.plist
- Individua la tua nuova applicazione fittizia nel Finder.
- Fai clic destro su di esso e seleziona Mostra contenuto pacchetto dal menu a comparsa.
- Apri la sua cartella Contenuti .
- Apri il file Info.plist in un editor di testo (ad esempio: TextEdit ).
3. Aggiungi la tua nuova UTI
È possibile scegliere tra due chiavi:
UTExportedTypeDeclarations
- per le tue estensioni di file personalizzate.
UTImportedTypeDeclarations
- per le estensioni di file che già esistono ma non sono riconosciute da OS X.
Scegli la chiave più adatta alle tue esigenze.
Quindi nel file Info.plist , prima delle ultime due righe ( </dict></plist>
), aggiungi questo codice:
<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>
apportando le seguenti modifiche:
- Sostituisci
KEY
con la chiave scelta (o UTExportedTypeDeclarations
o UTImportedTypeDeclarations
).
- Sostituisci
IDENTIFIER
con un identificatore DNS inverso adatto:
- Esportato - Qualcosa di simile
com.mycompany.mytype
- Importato - Per id Software 's
Doom WAD formato, un identificativo adatto sarebbe
com.idsoftware.wad
- Sostituire
EXTENSION
con l'estensione del file (senza il punto iniziale), per esempio: wad
.
Questo è il codice minimo necessario affinché Launch Services accetti la tua nuova UTI. Puoi anche aggiungere le seguenti proprietà opzionali:
UTTypeConformsTo
- Vedi l'appendice di seguito.
UTTypeDescription
- Una descrizione visibile all'utente, che verrà visualizzata nel Finder.
UTTypeIconFile
- Se aggiungi un
file di immagine icona Apple nella cartella Contenuti / Risorse dell'applicazione fittizia e aggiungi il suo nome file in questa proprietà, i file con la nuova estensione del file utilizzeranno questa icona.
UTTypeReferenceURL
- L'URL di un documento di riferimento che descrive questo tipo.
Ecco un esempio completo che mostra tutte le proprietà opzionali:
<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. Registra la tua nuova UTI con Launch Services
Esegui questo comando nel Terminale:
lsregister <PATH_TO_APP>
sostituendo <PATH_TO_APP>
con il percorso dell'applicazione fittizia, ad esempio:
lsregister ~/Desktop/MyDummyApp.app
Se ora crei un file con la tua nuova estensione, quindi selezionalo nel Finder e premi Enter , il Finder dovrebbe selezionare automaticamente solo la parte del nome file, non l'estensione.
Se si visualizzano i contenuti del database di Launch Services:
lsregister -dump
dovresti trovare il tuo nuovo UTI elencato:
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
Se in seguito desideri annullare la registrazione della tua nuova UTI, passa l' -u
opzione a lsregister
:
lsregister -u ~/Desktop/MyDummyApp.app
Appendice: gerarchia e conformità UTI
OS X dichiara una gerarchia di UTI elencate qui:
identificatori di tipo uniforme dichiarati dal sistema .
Ecco alcuni UTI nella gerarchia:
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
Ogni UTI "è conforme" al suo UTI padre:
Ad esempio, l'UTI public.html
, che definisce testo HTML, è conforme ai identificativo testo base, public.text
. In questo caso, la conformità consente alle applicazioni in grado di aprire file di testo generici di identificare i file HTML come quelli che può anche aprire. ( rif )
Quando si crea una nuova UTI, è una buona idea impostare il UTTypeConformsTo
proprietà su una delle UTI esistenti.
Ad esempio, se il vostro nuovo UTI è un tipo di codice sorgente, allora si dovrebbe impostare la UTTypeConformsTo
proprietà public.source-code
, in modo che possa essere aperto da qualsiasi applicazione che può aprire
public.source-code
o public.plain-text
o public.text
file.
CFBundleTypeExtensions
è una chiave legacy che è diventata obsoleta in OS X 10.5 . Il metodo preferito dal 2007 è di dichiarare nuove UTI, come menzionato qui e descritto nella mia risposta .