Resolver rechazos de iconos en la App Store: sRGB, canales alfa y otras trampas
La validación de iconos de App Store Connect falla sin explicar la causa. Usted carga un PNG de 1024×1024 que se ve perfecto en todos sus editores de imágenes y recibe alguna variante de «The image could not be processed». No se menciona el espacio de color ni el canal alfa. Solo aparece una barrera entre el envío y la App Store.
En realidad, el validador comprueba un conjunto reducido de propiedades técnicas, y el fallo de cualquiera de ellas produce el mismo error genérico. Las tres causas más frecuentes son un perfil de color distinto de sRGB, normalmente Display P3 de herramientas de diseño modernas; un canal alfa que la tienda prohíbe explícitamente; y, con menor frecuencia, un modo de color indexado que no debería aparecer en un icono creado en 2025, pero que sigue apareciendo al pasar los archivos por pipelines de optimización antiguos. Los tres problemas se pueden solucionar desde la terminal en menos de un minuto una vez identificados.
Qué exige realmente App Store Connect
Los requisitos de Apple para el icono de la publicación en la App Store son específicos. El archivo debe ser PNG y medir 1024×1024 píxeles. No debe tener canal alfa: ni parcialmente transparente ni completamente opaco; no debe contener ningún dato alfa. El espacio de color debería ser sRGB: las Human Interface Guidelines de Apple también incluyen Display P3 y Gray Gamma 2.2 entre los espacios de color admitidos para iconos de apps, pero, en nuestra experiencia, sRGB es la opción más segura para el icono de la App Store. El modo de color debería ser RGB TrueColor, no una paleta indexada.
La restricción del canal alfa existe porque App Store Connect aplica su propio radio de esquinas y composición a los iconos. Un icono con canal alfa interferiría en ese proceso. La restricción de sRGB existe porque la tienda muestra iconos en muchos dispositivos con distintos perfiles de pantalla; sRGB es la referencia común. Display P3, el espacio de color de amplia gama de Apple, es una opción de exportación habitual en herramientas como Figma, Sketch y Affinity Designer y, en nuestra experiencia, los iconos etiquetados como P3 están detrás de muchos de los fallos que aborda esta guía.
Diagnosticar el problema con sips
macOS incluye sips (Scriptable Image Processing System), una herramienta de línea de comandos que permite inspeccionar y transformar imágenes sin dependencias de terceros. Es la forma más rápida de ver exactamente qué contiene el archivo del icono.
sips --getProperty all icon.png
La salida es una lista simple de propiedades. Los campos relevantes para la validación de la App Store son hasAlpha, space y profile. Un archivo con problemas suele mostrar algo como esto:
hasAlpha: yes
space: RGB
profile: Display P3
Esa combinación fallará. El valor space: RGB no distingue entre RGB genérico y sRGB; el campo del perfil permite diferenciarlos. Un icono correcto, listo para cargar, debería mostrar hasAlpha: no y un perfil «sRGB IEC61966-2.1» o equivalente.
También puede consultar propiedades individuales para realizar una comprobación más rápida dentro de un script de compilación:
sips --getProperty hasAlpha icon.png
sips --getProperty profile icon.png
El problema del perfil de color
La causa más frecuente de rechazo es un perfil Display P3. Las pantallas modernas de los Mac admiten P3 y las herramientas de diseño pueden exportar con un perfil de amplia gama si no se elige sRGB explícitamente. Figma eliminó la opción «Unmanaged» en agosto de 2023; ahora cada archivo usa sRGB o Display P3 y las exportaciones usan el perfil del archivo, salvo que se cambie en los ajustes de exportación. Sketch tiene un ajuste similar por documento. Si el diseñador trabaja en un MacBook Pro y exporta sin comprobar ese ajuste, el PNG resultante es P3.
La solución es convertir el archivo a sRGB, no limitarse a etiquetarlo. La diferencia es importante. La opción sips -s profile incorpora un perfil distinto en los metadatos sin transformar los valores de los píxeles. Esto produce una descripción falsa: los píxeles están codificados como P3, pero etiquetados como sRGB. La opción correcta es --matchTo, que realiza una conversión real del espacio de color:
sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' icon.png --out icon-srgb.png
Esto lee los píxeles de origen como P3, los convierte a sus equivalentes sRGB y escribe un archivo nuevo. El cambio de color es imperceptible en la mayoría de las pantallas, pero importa para cumplir la validación. Después de ejecutarlo, confirme el resultado:
sips --getProperty profile icon-srgb.png
Ahora el perfil debería indicar «sRGB IEC61966-2.1».
Eliminar el canal alfa
sips no puede eliminar canales alfa. Puede inspeccionarlos y añadir un perfil a un archivo que los tenga, pero retirar la capa alfa requiere otra herramienta. convert, de ImageMagick, lo resuelve de forma sencilla:
convert icon-srgb.png -background white -alpha remove -alpha off icon-final.png
Las opciones actúan en secuencia. -background white establece el color de fondo que sustituirá los píxeles transparentes. -alpha remove compone la imagen sobre ese fondo y elimina la transparencia. -alpha off elimina completamente el canal alfa de la salida. El resultado es un PNG plano y opaco que acepta el validador de la App Store.
Si el icono no tiene transparencia real —todos los píxeles son completamente opacos—, pero el archivo sigue teniendo un canal alfa en su estructura, puede usar pngcrush. Su reducción sin pérdida del tipo de color, activada por defecto desde pngcrush 1.8.0, reescribe una imagen RGBA completamente opaca como RGB sin cambiar ningún valor de píxel:
pngcrush -ow -rem alla icon.png
El canal alfa contiene datos de píxeles, no es un bloque de metadatos, por lo que la opción -rem alla no lo elimina. Esa opción elimina todos los bloques auxiliares conocidos excepto tRNS, incluido cualquier perfil de color incorporado; por ello, compruebe de nuevo el perfil después. -ow sobrescribe el archivo original. Es más rápido y no produce pérdida de calidad, pero la reducción solo se realiza cuando no hay transparencia real que aplanar. Si identify -verbose icon.png | grep Alpha muestra píxeles que no sean opacos, use ImageMagick.
El caso límite del modo de color indexado
RGB TrueColor almacena cada píxel como tres valores de canales independientes de 8 o 16 bits. El modo indexado almacena una paleta de colores y los referencia mediante índices enteros: un formato pensado para pequeños GIF de 1989, no para iconos de apps. La mayoría de las herramientas de diseño nunca genera PNG indexados, pero algunos pipelines de optimización web, especialmente los antiguos que usan agresivamente herramientas como pngquant, pueden convertir iconos TrueColor a modo indexado como efecto secundario de la cuantización de la paleta.
Para comprobar el modo de color con ImageMagick:
identify -verbose icon.png | grep -E "^ Type"
Un archivo TrueColor muestra Type: TrueColor o Type: TrueColorAlpha. Un archivo indexado muestra Type: Palette. Si aparece Palette, conviértalo:
convert icon.png -type TrueColor icon-truecolor.png
En la práctica, es el motivo de rechazo menos frecuente, pero aparece de forma recurrente en bases de código cuyos iconos han pasado por un script de optimización de recursos en algún momento.
El proceso combinado de corrección
Cuando un icono tiene los tres problemas —perfil P3, canal alfa y posiblemente metadatos obsoletos—, la solución más sencilla es una breve secuencia de comandos: sips para convertir el color y, después, un comando de ImageMagick para todo lo demás:
sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' icon.png --out /tmp/icon-srgb.png && convert /tmp/icon-srgb.png -type TrueColor -background white -alpha remove -alpha off -strip icon-final.png
La opción -strip al final elimina todos los perfiles incorporados, comentarios y bloques de metadatos auxiliares de la salida. En ese punto, los píxeles ya se han convertido a sRGB, por lo que se genera un PNG pequeño y limpio; si desea conservar la etiqueta sRGB explícita recomendada más arriba, omita -strip. Después de ejecutarlo, una última comprobación con sips --getProperty all icon-final.png debería confirmar hasAlpha: no, space: RGB y la ausencia de perfil o la incorporación explícita del perfil sRGB.
Corregir el problema en el origen
Las correcciones desde la línea de comandos funcionan, pero la solución de fondo es configurar la herramienta de diseño para exportar correctamente desde el principio. En Figma, establezca el perfil de color del archivo en sRGB, o elija sRGB en los ajustes de exportación, antes de exportar recursos. En Sketch, haga clic en un área vacía del lienzo y ajuste Color Profile en el Inspector. En Affinity Designer, abra File → Document Setup, elija la pestaña Color y asegúrese de que el perfil sea sRGB IEC61966-2.1.
Para los iconos de la App Store, la exportación debe ser PNG, de 1024×1024, sin aplicar escalado y con el perfil sRGB activo. Si su pipeline CI/CD carga archivos a App Store Connect mediante xcrun altool o directamente mediante su API, añada antes de la carga una validación que ejecute sips --getProperty hasAlpha y haga fallar la compilación si hay canal alfa. Detectarlo antes de llamar a la API ahorra el tiempo de ida y vuelta y la investigación manual.
La enseñanza es que la validación de App Store Connect hace exactamente lo que Apple documentó. El problema es que esa documentación no aparece durante el flujo de carga y los mensajes de error no corresponden a las condiciones concretas que fallan. Cuando se conocen las tres propiedades comprobadas, la validación deja de ser un misterio y se convierte en una lista de verificación sencilla.
Artículos relacionados
- Del concepto en SwiftUI a la App Store en semanas — Los plazos y las decisiones necesarios para enviar una app, incluidos el aprovisionamiento y la revisión.
- Crear una app de preparación de exámenes con miles de preguntas — Decisiones de arquitectura para una app iOS modular con backend Supabase y funcionamiento sin conexión.
- Concurrencia en Swift 6: guía práctica de migración — Migración de apps SwiftUI a la concurrencia estricta de Swift 6, con advertencias reales del compilador y sus soluciones.