¿Qué es un archivo ICNS?
Un archivo ICNS es un contenedor de Apple para recursos de iconos de aplicaciones. Puede contener múltiples dimensiones, resoluciones y representaciones de píxeles de iconos que usa macOS.
Cómo funcionan los archivos ICNS
Un archivo ICNS agrupa las representaciones de un icono de macOS para diferentes tamaños de visualización y densidades de píxeles. Según la implementación del lector de Pillow, el archivo comienza con los cuatro bytes icns y una longitud total en big-endian, seguidos de elementos que comienzan, cada uno, con un código de tipo de cuatro caracteres y una longitud. El código de tipo identifica la representación: ic07 es el icono de 128 puntos, por ejemplo, y ic10 es el icono de 512 puntos a escala 2x. Las herramientas de Apple generan el archivo a partir de una carpeta con la extensión .iconset que contiene archivos PNG nombrados según el tamaño en puntos y la escala. El comando iconutil convierte esa carpeta en un archivo ICNS y viceversa, y la guía archivada de Apple de 2012 indica que Xcode 4.4 convierte automáticamente una carpeta iconset de un proyecto al compilarlo. El archivo Info.plist del paquete indica el nombre del archivo del icono mediante la clave CFBundleIconFile.
Datos clave
- ¿Qué tamaños corresponden al archivo? La convención iconset de Apple usa cinco tamaños en puntos (16, 32, 128, 256 y 512), cada uno a escala estándar y
@2x, por lo que la imagen más grande mide 1024 por 1024 píxeles y se llamaicon_512x512@2x.png. El conjunto no tiene que estar completo: la guía de Apple indica que el sistema elige la mejor representación para los tamaños que no proporciones. También indica queicon_16x16@2x.pngyicon_32x32.pngno son equivalentes aunque tengan la misma cantidad de píxeles, porque aparecen con diferentes tamaños en pantalla y pueden necesitar distintos niveles de detalle. Esta guía data de 2012 y se encuentra en el archivo de documentación de Apple. - ¿Qué contiene cada elemento? Depende del código de tipo, por lo que un analizador debe manejar más de una forma de carga útil. En el lector de Pillow, los elementos de
ic07aic14y deicp4aicp6contienen cada uno una imagen PNG o JPEG 2000 completa, mientras que los tipos más antiguos, comois32yil32, contienen datos RGB, sin comprimir o con compresión por longitud de secuencias, con el canal alfa en un elemento de máscara independiente de 8 bits, comos8mkol8mk. Esto es relevante para las herramientas que reutilizan un archivo ICNS como imagen de origen: la documentación de electron-builder indica que extrae el fotograma PNG de mayor tamaño incluido cuando un archivo ICNS es el origen del icono para otra plataforma. Un usuario informó de una compilación para Linux que se detuvo con el mensaje «Could not extract a PNG frame from ICNS file» después de que la herramienta cambiara su conversor de iconos, y lo solucionó proporcionando un PNG para la compilación de Linux. El informe no establece qué parte de ese archivo causó el fallo, y una persona responsable del mantenimiento indicó posteriormente que una nueva versión del conversor debería solucionarlo. - ¿Cómo creo o inspecciono uno? En macOS,
iconutil -c icnsconvierte una carpeta.iconseten un archivo ICNS yiconutil -c iconsetconvierte un archivo ICNS de nuevo en sus PNG; la guía de Apple indica que las imágenes del iconset deben ser cuadradas, con dimensiones que coincidan con sus nombres de archivo. Fuera de macOS, Pillow puede escribir archivos ICNS en cualquier sistema operativo desde la versión 8.3.0. Su componente de escritura escala la imagen que guardas a un cuadrado de cada tamaño que no pases medianteappend_images, y su código de guardado no comprueba que la imagen de origen sea cuadrada ni que tenga 1024 píxeles de ancho. Empareja las imágenes deappend_imagespor su ancho en píxeles, por lo que dos elementos con el mismo tamaño en píxeles comparten una imagen. Solo escribe los elementos deic07aic14, de 32 a 1024 píxeles de ancho: la imagen de 32 píxeles se almacena como el icono de 16 puntos a escala 2x, y no hay ningún elemento para el icono de 16 puntos ni para el de 32 puntos a escala estándar. La recomendación de Apple es diseñar primero el icono grande y luego decidir cómo reducirlo, ajustándolo cuando sea necesario al tamaño y la densidad de píxeles con los que aparece.
Cuándo son relevantes los archivos ICNS
Un archivo ICNS es relevante cuando se crea un paquete de aplicación de macOS fuera del pipeline de activos de Xcode, por ejemplo, mediante una herramienta de empaquetado multiplataforma. Puede que no tengas que generar el archivo por tu cuenta: la documentación de electron-builder indica que usa un archivo .icns ya generado tal cual y que también puede convertir un PNG o SVG de origen, generando todos los tamaños a partir de esa única entrada. Proporciona tu propio archivo cuando la herramienta lo requiera o cuando quieras controlar el diseño de cada tamaño. Dentro de Xcode, la documentación actual de Apple indica que proporciones el icono de la aplicación mediante un catálogo de activos o un archivo de Icon Composer. La guía archivada de Apple de 2012 indica que se recomienda un conjunto completo de tamaños, pero no es obligatorio: macOS elige la mejor representación disponible para un tamaño que omitas, lo que significa que ese tamaño se muestra a partir de un diseño dibujado para otro.
Fuentes
- Archivo de documentación de Apple: optimización para alta resolución (tamaños de iconset, iconutil y conversión con Xcode)
- Apple: clave CFBundleIconFile de la lista de propiedades de información
- Apple: configura el icono de tu aplicación mediante un catálogo de activos
- Apple: crea el icono de tu aplicación con Icon Composer
- Código fuente de Pillow: IcnsImagePlugin.py (tipos de elementos ICNS y cargas útiles)
- Manual de Pillow: lectura y guardado de ICNS
- Documentación de electron-builder (v26): iconos e imágenes (entradas de iconos aceptadas y conversión de ICNS)
- Incidencia 9876 de electron-builder: no se pudo extraer un fotograma PNG del archivo ICNS