# ITMS-90717: corregir “Invalid large app icon” con Expo

> 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.

Página original: [ITMS-90717: corregir “Invalid large app icon” con Expo](https://devoria.fr/es/blog/itms-90717-invalid-large-app-icon-expo)
Autor: [Mehdi Azizi](https://devoria.fr/es/mehdi-azizi)
Publicación: 2026-11-04
Última revisión del contenido: 2026-11-04


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](https://developer.apple.com/documentation/xcode/configuring-your-app-icon) 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:

```bash
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:

```bash
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:

```bash
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
```

Según la [documentación de ImageMagick](https://imagemagick.org/command-line-options/#alpha), `-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](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): 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](https://docs.expo.dev/versions/latest/config/app/), `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](https://docs.expo.dev/workflow/continuous-native-generation/) 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:

```bash
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](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-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:

```json
{
  "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](https://devoria.fr/es/blog/itms-90725-sdk-version-issue-expo).

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](https://developer.apple.com/design/human-interface-guidelines/app-icons) 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:

```bash
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](https://devoria.fr/es/blog/itms-90683-missing-purpose-string-expo) para los textos de permisos o [ITMS-91053](https://devoria.fr/es/blog/itms-91053-missing-api-declaration-expo) para el manifiesto de privacidad. Cuando el build sea aceptado, instálalo con [TestFlight](https://devoria.fr/es/blog/testflight-probar-app-iphone-antes-de-enviarla) 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](https://devoria.fr/es/expertise/app-rechazada-por-apple), y los motivos más comunes están en [por qué Apple rechaza una app](https://devoria.fr/es/blog/rechazo-apple-por-que-rechazan-tu-app).

Para revisar tu proyecto antes del envío, el [Review Kit](https://devoria.fr/es/kits/app-review) 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](https://devoria.fr/es/coaching): revisamos tu proyecto por videollamada, en tu pantalla. Y si estás preparando tu primer lanzamiento, [haz tu diagnóstico gratuito](https://devoria.fr/es/diagnostic): 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.


## Tu proyecto

[Review Kit](https://devoria.fr/es/kits/app-review): Mi checklist de revisión de App Store, mis rechazos de Apple corregidos, la de Google Play y tres skills de Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/es/kits/ios): Crea tu app para iPhone y Android con Claude Code: el código base de mis apps, el camino hasta las tiendas y todos los kits. 99 €.

[Diagnóstico: lo que te separa de tu app para iPhone](https://devoria.fr/es/diagnostic): 7 preguntas, 60 segundos: descubre qué te frena de verdad para publicar tu app para iPhone, tu ruta en 4 etapas y el kit ideal para ti.
