ITMS-90717: corregir “Invalid large app icon” con Expo
Por Mehdi Azizi
Publicado el , 8 min
ITMS-90717: el ícono de 1024 x 1024 de tu build tiene transparencia o un canal alfa. Expórtalo opaco, verifícalo con sips y vuelve a hacer un build.
ITMS-90717 es un control automático que Apple hace sobre tu build. Te dice que el ícono grande de la app, el de 1024 x 1024 píxeles que muestra el App Store, tiene transparencia o un canal alfa. La solución: un ícono cuadrado y opaco, exportado sin canal alfa, y después un nuevo build.
Con Expo, tu archivo PNG casi nunca es el culpable: el prebuild ya lo coloca sobre un fondo blanco. Leí ese código en el SDK 57 y revisé los íconos de Solys, TradaZen y Nolera. En ese caso, el error casi siempre viene de una carpeta ios versionada o de un archivo de Icon Composer. Aquí te explico cómo encontrar cuál es y cómo corregirlo.
¿Qué significa el error ITMS-90717?
El mensaje se titula "ITMS-90717: Invalid large app icon". Indica que el ícono grande del catálogo de imágenes de tu app "can't be transparent or contain an alpha channel": no puede ser transparente ni tener canal alfa. Los mensajes antiguos hablaban de "Invalid App Store Icon". Es la misma regla.
Ese ícono grande es el del App Store. La documentación de Xcode sobre íconos lo explica: una app distribuida en el App Store debe incluir su ícono de 1024 puntos en su catálogo de imágenes.
El canal alfa es la cuarta capa de un PNG, junto al rojo, el verde y el azul. Guarda la transparencia de cada píxel. Un ícono puede verse completamente lleno y aun así conservar ese canal: es la trampa que aparece en todos los hilos de los foros.
Como los demás errores ITMS, no es un rechazo de un revisor. Apple analizó el binario al recibirlo. Según la herramienta de envío, el error aparece como una falla de validación, por ejemplo con el código 409.
Verificar tu ícono con sips
En Mac, sips viene instalado de fábrica. Basta con una línea:
sips -g hasAlpha assets/icon.png
Lo que quieres ver es hasAlpha: no. El 15 de octubre de 2026 ejecuté este comando sobre los íconos declarados en los app.json de Solys, TradaZen y Nolera: todos responden no, en 1024 x 1024.
También creé un ícono de prueba: un cuadrado azul totalmente opaco, pero guardado con canal alfa. sips responde yes. Ningún píxel es transparente y, sin embargo, el canal está ahí. Por eso tantos desarrolladores escriben "mi ícono no tiene ninguna transparencia" debajo de este mensaje.
En Vista Previa (Preview), el inspector (Tools, Show Inspector) también muestra las propiedades de la imagen, entre ellas el canal alfa.
Corregir: exportar el ícono sin canal alfa
Tres métodos, del más simple al más preciso.
1. Vista Previa. File, Export, formato PNG, y desmarca la casilla Alpha. El archivo exportado ya no tiene canal alfa.
2. sips, sin instalar nada. sips no quita el canal alfa de un PNG. Hay que pasar por un JPEG, que no lo tiene:
sips -s format jpeg -s formatOptions 100 icon.png --out icon.jpg
sips -s format png icon.jpg --out icon-opaque.png
sips -g hasAlpha icon-opaque.png
En mi ícono de prueba con esquinas transparentes, las esquinas quedaron blancas y la última línea responde no. Pasar por JPEG comprime un poco la imagen, incluso con la calidad máxima: revisa bien el resultado.
3. ImageMagick. Si lo tienes instalado, eliges el color de fondo:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Según la documentación de ImageMagick, -alpha remove coloca la imagen sobre el color de fondo y -alpha off desactiva el canal.
Estos tres métodos rellenan la transparencia con un color sólido. Si tu logo flotaba sobre un fondo transparente, lo más limpio es retomar el archivo fuente y dibujarle un fondo de verdad. Expo lo pide en su guía del ícono de la app: el ícono debe llenar todo el cuadrado, sin esquinas redondeadas ni píxeles transparentes. iOS aplica la máscara por su cuenta.
De dónde toma Expo tu ícono y qué hace con él
Expo lee primero ios.icon y después el campo icon en la raíz de tu configuración. Según la referencia de configuración de Expo, ios.icon acepta tres formas: un PNG, un objeto con variantes light, dark y tinted, o una carpeta .icon creada con Icon Composer.
La siguiente tabla sale del código que genera el ícono de iOS en el prebuild, @expo/prebuild-config 57.0.16 (SDK 57), leído el 15 de octubre de 2026:
| Lo que declaras | Lo que hace el prebuild | Riesgo ITMS-90717 |
|---|---|---|
icon en PNG | Aplanado sobre blanco | Bajo |
ios.icon.light | Aplanado sobre blanco | Bajo |
ios.icon.tinted | Aplanado sobre blanco | Bajo |
ios.icon.dark | Conserva la transparencia | Lo pide Apple |
ios.icon en .icon | Copiado tal cual | Real |
Carpeta ios versionada | Prebuild no se ejecuta | Real |
Con un PNG, Expo quita la transparencia por sí solo y la reemplaza por blanco. Así que un logo recortado termina sobre un cuadrado blanco: no hay error, pero quizás no es el resultado que buscabas. La variante oscura conserva su transparencia, y es a propósito: Apple pide un fondo transparente para el ícono oscuro, para que se vea el fondo que pone el sistema.
En Nolera, que declara las tres variantes, sips responde no para los íconos claro y teñido generados, y yes para el oscuro. Según la fecha del commit de esas variantes, la versión 1.0.2, ya publicada, las incluye. No lo verifiqué en su IPA.
El caso de la carpeta ios versionada
Es la causa más probable con Expo. La página de Expo sobre la generación nativa continua lo dice: si tu proyecto tiene las carpetas android e ios, EAS Build no ejecuta el prebuild. Entonces tu app.json ya no toca el ícono: el que se envía a Apple es el PNG de la carpeta ios.
Revísalo desde la raíz del proyecto:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
Si el comando responde yes para el ícono de 1024, reemplaza ese archivo por tu versión opaca, con el mismo nombre. Si no hiciste ningún cambio nativo a mano, también puedes borrar la carpeta ios y agregarla al .gitignore: EAS la regenerará en cada build. En Solys, TradaZen y Nolera, git ignora esa carpeta.
El formato de iOS 26: Icon Composer
Icon Composer es la herramienta de Apple para los íconos Liquid Glass de iOS 26. Genera un solo archivo .icon con varias capas. Según la guía de Apple sobre Icon Composer, Xcode también obtiene de él las imágenes para versiones anteriores de iOS.
Expo lo soporta desde el SDK 54. Declaras la carpeta como texto, nunca dentro del objeto de variantes:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
En este caso, el prebuild copia la carpeta sin tocarla, y es Xcode quien genera el ícono final. Así que necesitas Xcode 26 o superior, el de las imágenes recientes de EAS, como explico en la guía sobre ITMS-90725.
Desde agosto de 2025, en el foro de desarrolladores de Apple, hay hilos que reportan ITMS-90717 con archivos .icon. Las causas mencionadas: una capa PNG transparente, una capa más grande que el lienzo, un grupo con el efecto Blur cerca del borde. Las soluciones alternativas citadas: quitar el Blur, mantener un fondo sólido o volver a un PNG. Esos hilos no ofrecen ninguna corrección oficial de Apple, y el error todavía se reportaba en agosto de 2026.
Las reglas de Apple sobre íconos van en esa dirección: si importas una capa de fondo, debe cubrir toda la superficie y ser opaca. Mis apps todavía usan un PNG, así que no probé Icon Composer en producción. Si un archivo .icon bloquea tu envío, cambia ios.icon de nuevo a un PNG: Expo lo aplanará y tu ícono pasará este control.
Verificar el ícono en el build final
En el IPA, el ícono de 1024 no es un archivo PNG: Xcode lo compila dentro de Assets.car. Descarga el IPA desde la página del build en expo.dev y ejecuta:
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
Cada ícono muestra un campo Opaque. El 15 de octubre de 2026 compilé con actool, la herramienta de Xcode, el ícono de Solys y mi ícono de prueba con esquinas transparentes. El primero sale como "Opaque" : true y el segundo como "Opaque" : false. Apple no documenta este campo: tómalo como una pista, no como el control de Apple.
Una trampa que conviene conocer: no pruebes con sips los PNG pequeños que están en la raíz de la app. Xcode los escribe con canal alfa, incluso cuando la fuente es opaca. En mi prueba con el ícono de Solys, sips responde yes para ellos.
Los otros errores de íconos
| Código | Lo que señala Apple | Pista con Expo |
|---|---|---|
| ITMS-90717 | Ícono 1024 transparente | Exportar sin alfa |
| ITMS-90704 | Falta el ícono 1024 | Falta la entrada 1024 |
| ITMS-90022 | Falta el ícono de iPhone | Catálogo incompleto |
| ITMS-90023 | Falta el ícono de iPad | Catálogo incompleto |
Los últimos tres mensajes son sobre todo de 2017 y 2018, cuando Xcode 9 cambió las reglas de los íconos.
Con Expo, se volvieron raros. El prebuild escribe un único ícono universal de 1024 y Xcode genera los demás tamaños. Si no declaras ningún ícono, Expo incluso crea un cuadrado blanco para evitar una falla en el envío. Si te aparece uno de estos errores, revisa la carpeta ios versionada: el archivo Contents.json de AppIcon.appiconset debe tener una entrada de tamaño 1024x1024, y el PNG que menciona debe existir.
Antes de tu próximo envío
Un ícono se corrige en diez minutos, pero cada error te cuesta un build. Los demás controles automáticos piden el mismo rigor, como ITMS-90683 para los textos de permisos o ITMS-91053 para el manifiesto de privacidad. Cuando el build sea aceptado, instálalo con TestFlight para ver tu ícono en tu pantalla de inicio.
Los rechazos de un revisor requieren más perspectiva: el proceso está en la página app rechazada por Apple, y los motivos más comunes están en por qué Apple rechaza una app.
Para revisar tu proyecto antes del envío, el Review Kit reúne mi checklist y skills de Claude Code que revisan tu proyecto. Si tu envío está bloqueado y quieres una mirada humana, reserva una hora conmigo: revisamos tu proyecto por videollamada, en tu pantalla. Y si estás preparando tu primer lanzamiento, haz tu diagnóstico gratuito: pone los pasos en orden y te envía mi checklist para evitar rechazos de Apple.
Preguntas frecuentes
¿Por qué Apple detecta un canal alfa si mi ícono no tiene ninguna transparencia?
Porque un PNG puede conservar un canal alfa aunque todos sus píxeles sean opacos. Muchas herramientas lo agregan por defecto al exportar. Verifícalo con sips -g hasAlpha y vuelve a exportar el ícono sin ese canal.
¿Se puede corregir ITMS-90717 con una actualización remota?
No. El ícono está compilado en el binario, dentro de Assets.car. Una actualización remota solo cambia el JavaScript y los recursos de la app. Corrige el ícono, haz un nuevo build y vuelve a enviarlo.
¿El ícono oscuro puede ser transparente?
Sí. Apple pide un fondo transparente para la variante oscura, y Expo conserva su transparencia. De ahí deduzco que el control apunta al ícono principal, el del App Store: ese es el que debe ser opaco.
¿Hay que redondear las esquinas del ícono de iOS?
No. Entrega un cuadrado lleno: iOS aplica la máscara por su cuenta. Las esquinas redondeadas dejan píxeles transparentes en los ángulos, justo lo que rechaza este control.
¿Expo soporta los íconos de Icon Composer de iOS 26?
Sí, desde el SDK 54: declara la ruta de la carpeta .icon en ios.icon, como texto. El prebuild la copia tal cual y Xcode 26 la compila. Si te aparece ITMS-90717 con este formato, revisa las capas transparentes y el efecto Blur, o vuelve temporalmente a un PNG.

