Come impostare un'icona per un tipo di file su Mac?


42

Come impostare un'icona per alcuni tipi di file considerato l' intero sistema?

Ad esempio, ho file di testo che terminano con l'estensione .scala e voglio associare un'icona per quei file attraverso l'intero sistema e per qualsiasi file appena creato di questa estensione.

Grazie.


Ho appena notato che sei un MAC ... ma su Windows cambieresti l'applicazione predefinita associata a quel tipo di file. Il file assume quindi l'icona di tale applicazione.
MrWhite,

12
@ w3d: non è su un MAC, è su un Mac.
Wuffers,

Risposte:


41

Le icone per i tipi di file sono gestite da Launch Services (il servizio che determina, tra le altre cose, quale applicazione gestisce un tipo di file). L'icona del file è sempre fornita dall'applicazione che gestisce l'apertura di un file per impostazione predefinita. In questo modo, ad esempio Anteprima, vengono visualizzate le icone PDF per impostazione predefinita e le icone PNG, ma se si modificano tutti i file PNG per aprirli utilizzando Pixelmator, questi file ottengono successivamente un'icona in stile Pixelmator.

Quello che devi fare è aggiungere la definizione del tipo di file all'applicazione che lo apre per impostazione predefinita o creare la tua applicazione "fittizia" per il tipo di file .


Ad esempio, il mio sistema non lo sa ancora .scalae voglio TextMategestirlo.

In primo luogo, mostro il contenuto del pacchettoTextMate.app , navigo Contents/e apro Info.plist, con un editor di testo, o Property List Editor, parte degli strumenti di sviluppo di Apple.

TextMate utilizza un formato insolito per Info.plist(di solito è binario o XML), un estratto del quale è simile al seguente:

CFBundleDocumentTypes = (
    {   CFBundleTypeName = "ADA source";
        CFBundleTypeExtensions = (adb, ads); 
        CFBundleTypeIconFile = ADA; 
    },

La chiave principale CFBundleDocumentTypesè ciò che vogliamo. Il primo elemento figlio, racchiuso tra parentesi graffe, contiene una definizione del tipo di file, completa di nome (per la colonna del tipo di file nel Finder), estensioni di file e nome del file icona ( ADAper TextMate.app/Contents/Resources/ADA.icns).

Per supportare .scala, dobbiamo aggiungere un elemento fratello simile a quello sopra, sotto lo stesso elemento genitore CFBundleDocumentTypes:

CFBundleDocumentTypes = (
    {   CFBundleTypeName = "ADA source";
        CFBundleTypeExtensions = (adb, ads); 
        CFBundleTypeIconFile = ADA; 
    },
    {   CFBundleTypeName = "Scala source";
        CFBundleTypeExtensions = (scala); 
        CFBundleTypeIconFile = ADA; 
    },

Per semplicità, sto usando lo stesso file icona, ma possiamo crearne uno noi stessi, copiarlo TextMate.app/Contents/Resources/SCALA.icnse fare riferimento ad esso come SCALAin Info.plist.

Ora chiudi TextMate se è in esecuzione, sposta l'applicazione TextMate.appin un'altra cartella e aprila di nuovo. Chiudilo e spostalo indietro, quindi riaprilo di nuovo. Questo viene fatto in modo che Launch Services rilevi le modifiche che Info.plistabbiamo appena eseguito.

Il risultato è simile al seguente (ricorda, abbiamo riutilizzato l'icona AdM di TextMate per .scala):

testo alternativo

Se non vuoi associare un'applicazione ad aprire .scalafile (non riesci a immaginare il perché, ma c'è un modo per farlo): modifica le aggiunte al file nel modo seguente:

    {   CFBundleTypeName = "Scala source";
        CFBundleTypeExtensions = (scala); 
        CFBundleTypeIconFile = ADA; 
        CFBundleTypeRole = "None";
    },

Ora, l'applicazione dichiara il tipo di file, ma dice al sistema che non sa come gestirlo (Apple fornisce l'esempio del Finder che dichiara i tipi di carattere, sebbene non possa aprirli da solo).

* Notare che qualsiasi assegnazione di applicazione permanente al tipo di file sovrascrive l'icona, probabilmente al tipo di "documento sconosciuto".


Se hai già un'applicazione associata .scalae vuoi solo cambiare l'icona del file senza cambiare l'applicazione associata:

Apri l'applicazione Info.plist, cerca la voce del tipo di file CFBundleDocumentTypese ottieni il file CFBundleTypeIconFile. Modifica questo file .../Contents/Resources/e dovrebbe riflettersi nel Finder poco dopo.


Informazioni sul bonus:

Come modificare l'icona di un singolo documento o cartella in un file di immagine

Supponiamo di avere un'immagine ~/Desktop/test.pngche desideri utilizzare un'icona (è lo screenshot usato sopra per illustrare la .scalamodifica dell'icona / TextMate / Ada.

Apri /Applications/Utilities/Terminal.appe inserisci:

sips -i ~/Desktop/test.png

Questo cambierà l' test.pngicona del file nella sua immagine. Dal momento che mi piace la ricorsione, proviamo questo:

Prima, la semplice pngicona Anteprima (l'anteprima dell'immagine è disattivata):

testo alternativo

Dopo, il file immagine stesso è la sua anteprima:

testo alternativo

Ora possiamo aprire la finestra di dialogo Ottieni informazioni del file , fare clic sull'icona del documento futuro desiderata in alto a sinistra, Cmd-Cper copiarla, aprire la finestra di dialogo Ottieni informazioni del file di documento , fare clic sull'icona del documento corrente indesiderata in alto a sinistra e Cmd-Vincollare il icona che vogliamo.


In alternativa, è possibile aprire il file immagine che si desidera utilizzare come icona in Anteprima, Cmd-Aper selezionare tutto, Cmd-Cper copiare l'immagine negli Appunti. Quindi apri la finestra di dialogo Ottieni informazioni del documento di destinazione , seleziona l'icona da modificare in alto a sinistra e Cmd-Vincollaci sopra l'immagine.


2
Una cosa da verificare: questo invalida la firma digitale dell'applicazione? codesign --verify --verbose /Applications/TextMate.appo qualcosa di simile. Se invalidato, non farlo per le applicazioni che richiedono eccezioni nel firewall o che necessitano di portachiavi. Non sono sicuro di cos'altro potrebbe andare male rovinando la firma. (+1 per i dettagli!)
Arjan il

1
Modifica BAH, ho scremato la prima volta e non ho visto il tuo metodo alternativo per forzare un aggiornamento LS. meh, FWIW: solo una cosa dopo aver cambiato la Info.plist di un'applicazione (o di qualsiasi bundle / pacchetto): probabilmente avrai bisogno touchdel livello di root del bundle per aggiornare la sua data di modifica. Quindi nel Finder, deseleziona e ri-seleziona l'applicazione / bundle / pacchetto e quando nota che la data di modifica è successiva a quella delle informazioni memorizzate nella cache nel database di Launch Services, la registrerà nuovamente, riconoscendo in tal modo eventuali modifiche hai fatto.
NSGod

1
@Arjan Hai un punto lì. Sfortunatamente, TextMate.app: code object is not signede non voglio ripeterlo. Ho il sospetto che sia un vero problema, non ci ho pensato. Modifica : ripensandoci, vengono memorizzate anche le scorciatoie da tastiera personalizzate Info.plist. Quindi potrebbe non essere un problema, se non lo sono. L'unico problema potrebbe essere l'aggiunta di un file icona aggiuntivo all'interno del bundle dell'app.
Daniel Beck

1
Ho usato esattamente lo stesso metodo (anche se ho apportato le modifiche nel file info.plist xml di Sublime Text). Di conseguenza, l'associazione dei file ha funzionato, ma ciò non ha cambiato l'icona del file associato. Qualche idea sul perché questo non funzionerebbe?
Gfrigon,

2
Un po 'in ritardo alla festa, ma devo essere d'accordo con @Arjan. Se hai un'app firmata in codice, come dire, oh, non lo so, ... Xcode ... ti dirà infatti che l'app è danneggiata e per eliminarla e scaricarla nuovamente dall'App Store. Quello che davvero non mi piace è come app come Enthought Canopy dirottano da sole tutte le icone delle estensioni. Apple dovrebbe davvero averlo quando si imposta l'editor predefinito per un tipo di file in cui entra il sistema e apporta tutte le modifiche necessarie a cose come l'associazione delle app.
AMR,

1

È necessario sostituire il file ICNS all'interno del programma assegnato come programma predefinito per il tipo di file specifico.

1 - Crea un'immagine per l'icona desiderata, quindi salva come tipo di file png (png supporta la trasparenza).

2 - Converti il ​​file png in un tipo di file icns (FastIcns è abbastanza grande ed è gratuito).

3 - Fare clic su CMD o fare clic con il pulsante destro del mouse sull'applicazione impostata come app predefinita per il tipo di file specifico, quindi selezionare Mostra contenuto pacchetto.

4 - Cerca il file icns che l'applicazione sta designando come icona per il tipo di file specifico, probabilmente si troverà in una cartella chiamata Risorse.

5 - Assegna un nome al file icns che hai creato, esattamente lo stesso nome del file che desideri sostituire.

6 - Copia e incolla, oppure trascina e rilascia il nuovo file icns che hai creato nella cartella in cui si trova quello che vuoi sostituire, e scegli sostituisci quando ti viene data l'opzione.

7 - Fatto! Tutte le icone per quel tipo di file sono state sostituite con la nuova icona desiderata.


A quale versione di OSX fa riferimento questa risposta ... solo per timestamp per quando il metodo cambia inevitabilmente.
JoshP,

0

Il modo in cui faccio sempre questo è di trovare un file con quell'estensione, fare clic con il tasto destro del mouse »Ottieni informazioni, o Command-i, e questo farà apparire il pannello informazioni. Nella parte superiore viene visualizzata l'icona attualmente utilizzata per l'immagine. Puoi trascinare un file immagine su quello per cambiarlo, o se hai copiato l'immagine, puoi fare clic sull'immagine che vuoi cambiare e fare un incolla per cambiarlo.


Vedi anche l'immagine in Come posso cambiare l'icona di un'applicazione in Mac OS X? e nota che qualsiasi immagine che puoi aprire in Anteprima può essere usata come icona, aprendola in Anteprima, selezionandola e copiandola usando Command-C. Ciò inserirà negli appunti un'immagine che include anche un formato da utilizzare come icona. Quindi seleziona l'icona esistente e incolla gli appunti usando Command-V.
Arjan,

3
Questo non funziona Quando trascino un file .PNG sull'immagine nella schermata delle informazioni, ottengo l'icona PNG anziché l'immagine nel PNG. E cambia il file specifico e non tutti i file con la stessa estensione in tutto il sistema.
Eran Kampf,
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.