Come posso fare in modo che OS X riconosca le nuove estensioni di file?


16

In Finder.app, puoi premere Enterper modificare il nome del file o della cartella attualmente selezionati.

OS X selezionerà automaticamente solo la parte del nome del file, non l'estensione:

Questo è molto utile, perché in questo modo puoi semplicemente iniziare a digitare il nuovo nome, senza preoccuparti di modificare accidentalmente l'estensione del file.

Tuttavia, questo sembra funzionare solo per tipi di file "noti". Se lo provi con un'estensione sconosciuta, viene selezionato l'intero nome del file (inclusa l'estensione):

Ho provato a mappare un'applicazione che può aprire tutti i .barfile tramite + I→ "Cambia tutto", ma continuo a ottenere il comportamento descritto sopra.

Dove è memorizzato l'elenco dei tipi di file "noti"? C'è un modo per far riconoscere a OS X nuovi tipi di file?

Risposte:


7

Questo post di SuperUser ha funzionato per me:

Devi accedere all'applicazione che desideri utilizzare per aprire questi file e modificarne il pacchetto. Fare clic con il tasto destro del mouse sull'applicazione per gestire queste estensioni di file e selezionare Mostra contenuto pacchetto . Passare a Contentse modificare Info.plist. Potrebbe essere necessario l' Editor elenco proprietà , che fa parte degli strumenti per sviluppatori di Apple. Se sei fortunato, è in formato XML. Modifica questo file CFBundleDocumentTypese aggiungi una voce per l'estensione che desideri.

Ho usato TextEdit come applicazione predefinita per aprire i .barfile. L'unica cosa che ho fatto diversamente è stata modificare l'XML che è andato in TextEdit Info.plista:

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

... e poi ho usato LSRefresh.app per aggiornare TextEdit nel database dei servizi di avvio. Quindi ha funzionato come hai suggerito, anche se probabilmente romperà la firma del codice di Textedit (e di qualsiasi altra applicazione firmata) su Lion.


1
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 .
TachyonVortex

5
Mi dispiace, devo sottovalutare questo perché questo è un cattivo consiglio. Non solo non è saggio manomettere un pacchetto di app (correndo il rischio di effetti collaterali bizzarri o peggio), ma può anche rovinare completamente la copia dell'app. Si noti che questo processo non invalida la firma del codice ma non sottolinea che nelle versioni macOS che supportano sandboxing (10.7+), un'app sandbox con una firma non
Bob

1
@binarybob, Quello che non capisco è perché non fai semplicemente xxx.barclic con il pulsante destro del mouse sul file e selezioni open with?
Pacerier,

@Bob, cos'è l'appbox?
Pacerier,

Il sandboxing delle app @Pacerier è una funzione di sicurezza di macOS che isola completamente le app dal sistema e dall'altro, con un elenco molto breve di "titolarità" che specifica in dettaglio quali app sono autorizzate a fare. Tale elenco di diritti è incorporato nella firma del codice e convalidato ogni volta che l'app viene eseguita, garantendo che le funzionalità delle app non possano essere manomesse, né per caso né per attacco. Vedi questo documento per una spiegazione tecnica.
Bob,

26

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 lsregisterstrumento, 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 lsregistersemplicemente 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 KEYcon la chiave scelta (o UTExportedTypeDeclarationso UTImportedTypeDeclarations).
  • Sostituisci IDENTIFIERcon un identificatore DNS inverso adatto:
    • Esportato - Qualcosa di simile com.mycompany.mytype
    • Importato - Per id Software 's Doom WAD formato, un identificativo adatto sarebbecom.idsoftware.wad
  • Sostituire EXTENSIONcon 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' -uopzione 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 UTTypeConformsToproprietà public.source-code, in modo che possa essere aperto da qualsiasi applicazione che può aprire public.source-codeo public.plain-texto public.textfile.


0

Segui questi passi:

  1. Seleziona il file con estensione non riconosciuta (ad esempio, .txt).

  2. Fare clic con il tasto destro e selezionare Get Infoo utilizzare la scorciatoia da tastiera Commandiper visualizzare la finestra delle informazioni.

  3. Fai clic sull'indicatore di divulgazione oltre a Apri con: per aprire la vista dettagliata. Seleziona l'app desiderata dal menu a discesa. Ciò assocerà il documento all'applicazione selezionata (ad es. TextEdit).

  4. Fare clic sul pulsante Cambia tutto ... Mostrerà prima una finestra di dialogo che chiede di confermare le tue intenzioni e collegherà tutti i .txtdocumenti per aprirli con TextEdit, lasciando l'estensione non selezionata quando premi Invio sul nome del documento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.