¿Cómo configurar un icono para un tipo de archivo en Mac?

42

¿Cómo configurar un ícono para algunos tipos de archivos en todo el sistema?

Por ejemplo, tengo archivos de texto que terminan con la extensión .scala y quiero asociar un ícono para esos archivos a través de todo el sistema y para cualquier archivo recién creado de esta extensión.

Gracias.

Quirón
fuente
Acabo de notar que eres un MAC ... pero de todos modos, en Windows cambiarías la aplicación predeterminada que está asociada con ese tipo de archivo. El archivo luego toma el icono de esa aplicación.
MrWhite
12
@ w3d: no está en una MAC, está en una Mac.
Wuffers

Respuestas:

41

Launch Services maneja los iconos para los tipos de archivo (el servicio determina, entre otras cosas, qué aplicación maneja un tipo de archivo). El icono del archivo siempre lo proporciona la aplicación que maneja la apertura de un archivo de forma predeterminada. De esta manera, por ejemplo, Vista previa proporciona íconos PDF por defecto e íconos PNG, pero si cambia todos los archivos PNG para abrirlos usando Pixelmator, estos archivos obtendrán un ícono de estilo Pixelmator después.

Lo que debe hacer es agregar su definición de tipo de archivo a la aplicación que la abre de manera predeterminada, o crear su propia aplicación "ficticia" para el tipo de archivo .


Como ejemplo, mi sistema aún no lo sabe .scalay quiero TextMatemanejarlo.

Primero, muestro el contenido del paqueteTextMate.app , navego Contents/y abro Info.plist, ya sea con un editor de texto o como Property List Editorparte de las herramientas de desarrollo de Apple.

TextMate usa un formato inusual para Info.plist(generalmente es binario o XML), un extracto del cual se ve así:

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

La clave principal CFBundleDocumentTypeses lo que queremos. El primer elemento secundario del mismo, encerrado entre llaves, contiene una definición de tipo de archivo, completa con el nombre (para la columna de tipo de archivo en Finder), las extensiones de archivo y el nombre del archivo de icono ( ADApara TextMate.app/Contents/Resources/ADA.icns).

Para admitir .scala, debemos agregar un elemento hermano similar al anterior, debajo del mismo elemento padre CFBundleDocumentTypes:

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

Por simplicidad, estoy usando el mismo archivo de icono, pero podemos crear uno nosotros mismos, copiarlo TextMate.app/Contents/Resources/SCALA.icnsy hacer referencia a él como SCALAen Info.plist.

Ahora, cierre TextMate si se está ejecutando, mueva la aplicación TextMate.appa una carpeta diferente y ábrala nuevamente. Ciérrelo y muévalo hacia atrás, luego ábralo nuevamente. Esto se hace para que Launch Services recoja los cambios Info.plistque acabamos de realizar.

El resultado se ve así (recuerde, reutilizamos el icono de TextMate Ada para .scala):

texto alternativo

Si no desea asociar una aplicación para abrir .scalaarchivos (no puedo imaginar por qué, pero hay una manera de hacerlo): cambie las adiciones al archivo a lo siguiente:

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

Ahora, la aplicación declara el tipo de archivo, pero le dice al sistema que no sabe cómo manejarlo (Apple da el ejemplo de que Finder declara los tipos de fuente, aunque no puede abrirlos).

* Tenga en cuenta que cualquier asignación de aplicación permanente al tipo de archivo anula el icono, probablemente al tipo de "documento desconocido".


Si ya tiene una aplicación asociada .scalay solo desea cambiar el icono del archivo sin cambiar la aplicación asociada:

Abra la aplicación Info.plist, busque la entrada de tipo de archivo CFBundleDocumentTypesy obtenga el CFBundleTypeIconFile. Modifique este archivo .../Contents/Resources/y debería reflejarse en Finder poco después.


Información adicional:

Cómo cambiar el ícono de un solo documento o carpeta a un archivo de imagen

Suponga que tiene una imagen ~/Desktop/test.pngque desea usar como un ícono (es la captura de pantalla utilizada anteriormente para ilustrar el .scalacambio de ícono / TextMate / Ada.

Abrir /Applications/Utilities/Terminal.appe ingresar:

sips -i ~/Desktop/test.png

Esto cambiará el test.pngicono del archivo a su imagen. Como disfruto de la recursividad, intentemos esto:

Antes, el pngícono de Vista previa simple (la vista previa de la imagen está desactivada):

texto alternativo

Después, el archivo de imagen en sí es su vista previa:

texto alternativo

Ahora podemos abrir el cuadro de diálogo Obtener información del archivo , hacer clic en el icono del documento futuro deseado en la parte superior izquierda, Cmd-Cpara copiarlo, abrir el cuadro de diálogo Obtener información del archivo del documento , hacer clic en el icono del documento actual no deseado en la parte superior izquierda y Cmd-Vpegar el icono que queremos


Alternativamente, puede abrir el archivo de imagen que desea usar como icono en Vista previa, Cmd-Apara seleccionar todo, Cmd-Cpara copiar la imagen al portapapeles. Luego abra el cuadro de diálogo Obtener información del documento de destino , seleccione el icono para cambiar en la esquina superior izquierda y Cmd-Vpegue la imagen sobre él.

Daniel Beck
fuente
2
Una cosa para verificar: ¿esto invalida la firma digital de la aplicación? codesign --verify --verbose /Applications/TextMate.appo algo parecido Si se invalida, no lo haga para aplicaciones que necesitan excepciones en el firewall o que necesitan Llavero. No estoy seguro de qué otra cosa podría salir mal al jugar con la firma. (+1 para más detalles)
Arjan
1
Editar BAH, hojeé la primera vez y no vi su método alternativo para forzar una actualización de LS. meh, FWIW: Solo una cosa después de cambiar la lista de información de una aplicación (o cualquier paquete / paquete): probablemente necesitará al touchnivel raíz del paquete para actualizar su fecha de modificación. Luego, en el Finder, anule la selección y vuelva a seleccionar la aplicación / paquete / paquete y cuando note que la fecha de modificación es posterior a la de la información almacenada en caché en la base de datos de Launch Services, la volverá a registrar, reconociendo así cualquier cambio usted ha hecho.
NSGod
1
@Arjan Tienes un punto allí. Desafortunadamente, TextMate.app: code object is not signedy no quiero volver a pasar por eso. Sin embargo, sospecho que es un problema real, no lo pensé. Editar : Pensándolo bien, los atajos de teclado personalizados también se almacenan en Info.plist. Entonces, eso podría no ser realmente un problema, si no lo son. El único problema podría ser la adición de un archivo de icono adicional dentro del paquete de la aplicación.
Daniel Beck
1
Utilicé exactamente el mismo método (aunque haciendo los cambios en xl Info.plist de Sublime Text). Como resultado, la asociación de archivos funcionó, pero esto no cambió el ícono del archivo asociado. ¿Alguna idea de por qué esto no funcionaría?
gfrigon
2
Un poco tarde para la fiesta, pero tengo que estar de acuerdo con @Arjan. Si tiene una aplicación con código firmado, como, por ejemplo, no sé ... Xcode ... de hecho le dirá que la aplicación está dañada y que la elimine y vuelva a descargarla desde la tienda de aplicaciones. Lo que realmente no me gusta es cómo aplicaciones como Enthought Canopy secuestran todos los íconos de extensión por sí mismos. Apple realmente debería tenerlo cuando configuras el editor predeterminado para un tipo de archivo en el que entra el sistema y realiza todos los cambios necesarios en cosas como la asociación de aplicaciones.
AMR
1

Debe reemplazar el archivo ICNS dentro del programa asignado como programa predeterminado para el tipo de archivo específico.

1 - Cree una imagen para el icono deseado, luego guárdelo como un tipo de archivo png (png admite transparencia).

2 - Convierte el archivo png a un tipo de archivo icns (FastIcns es bastante bueno y es gratis).

3 - Haga clic en CMD o haga clic con el botón derecho en la aplicación que está configurada como la aplicación predeterminada para el tipo de archivo específico, luego seleccione mostrar contenido del paquete.

4 - Busque el archivo icns que la aplicación está designando como el icono para el tipo de archivo específico, probablemente estará en una carpeta llamada Recursos.

5 - Nombra el archivo icns que creaste, exactamente el mismo nombre de archivo que el que deseas reemplazar.

6 - Copie y pegue, o arrastre y suelte el nuevo archivo icns que creó en la carpeta donde se encuentra el que desea reemplazar, y elija reemplazar cuando se le dé la opción.

7 - ¡Ya terminaste! Todos los iconos para ese tipo de archivo han sido reemplazados por el nuevo icono deseado.

daporterfizzle
fuente
¿Con qué versión de OSX se relaciona esta respuesta ... solo para marcar la fecha en que el método cambia inevitablemente?
JoshP
0

La forma en que siempre hago esto es buscar un archivo con esa extensión, hacer clic derecho en »Obtener información o Comando-i, y eso abrirá el Panel de información. En la parte superior, verá el icono que se usa actualmente para la imagen. Puede arrastrar un archivo de imagen a ese para cambiarlo, o si copió la imagen, puede hacer clic en la imagen que desea cambiar y pegar para cambiarla.

jakehschwartz
fuente
Consulte también la imagen en ¿Cómo puedo cambiar el icono de una aplicación en Mac OS X? , y tenga en cuenta que cualquier imagen que pueda abrir en Vista previa se puede usar como un icono, abriéndola en Vista previa, seleccionándola y copiándola con Comando-C. Eso colocará una imagen en el portapapeles que también incluye un formato para usar como icono. Luego seleccione el icono existente y pegue el portapapeles con Command-V.
Arjan
3
Esto no funciona Cuando arrastro un archivo .PNG a la imagen en la pantalla de información, obtengo el icono PNG en lugar de la imagen en PNG. Y cambia el archivo específico y no todos los archivos con la misma extensión en todo el sistema.
Eran Kampf