# ITMS-90717: corregir «Invalid large app icon» amb Expo

> ITMS-90717: la icona de 1024 x 1024 del teu build conserva transparència o un canal alfa. Exporta-la opaca, comprova-la amb sips i torna a fer un build.

Pàgina original: [ITMS-90717: corregir «Invalid large app icon» amb Expo](https://devoria.fr/ca/blog/itms-90717-invalid-large-app-icon-expo)
Autor: [Mehdi Azizi](https://devoria.fr/ca/mehdi-azizi)
Publicació: 2026-11-04
Darrera revisió del contingut: 2026-11-04


ITMS-90717 és un control automàtic d'Apple sobre el teu build. Diu que la icona gran de l'app, la de 1024 x 1024 píxels que mostra l'App Store, conté transparència o un canal alfa. **La solució: una icona quadrada i opaca, exportada sense canal alfa, i després un build nou.**

Amb Expo, el teu fitxer PNG rarament és el culpable: el prebuild ja el col·loca sobre un fons blanc. He llegit aquest codi a l'SDK 57 i he comprovat les icones de Solys, TradaZen i Nolera. L'error ve llavors, la majoria de vegades, d'una carpeta `ios` versionada o d'un fitxer d'Icon Composer. Així és com trobes quin és, i com el corregeixes.

## Què vol dir l'error ITMS-90717?

El missatge es titula «ITMS-90717: Invalid large app icon». Precisa que la icona gran del catàleg d'imatges de la teva app «can't be transparent or contain an alpha channel»: no pot ser transparent ni contenir un canal alfa. Els missatges antics parlaven d'«Invalid App Store Icon». És la mateixa regla.

Aquesta icona gran és la de l'App Store. La [documentació de Xcode sobre les icones](https://developer.apple.com/documentation/xcode/configuring-your-app-icon) ho explica: una app distribuïda a l'App Store ha d'incloure la seva icona de 1024 punts al catàleg d'imatges.

El canal alfa és la quarta capa d'un PNG, al costat del vermell, el verd i el blau. Desa la transparència de cada píxel. **Una icona pot semblar plena i conservar aquest canal**: és el parany que surt a tots els fils de fòrum.

Com els altres errors ITMS, no és el rebuig d'un revisor. Apple ha analitzat el binari en el moment del lliurament. Segons l'eina d'enviament, l'error apareix com una fallada de validació, per exemple amb el codi 409.

## Comprovar la teva icona amb sips

Al Mac, `sips` ve instal·lat de sèrie. N'hi ha prou amb una línia:

```bash
sips -g hasAlpha assets/icon.png
```

Vols llegir `hasAlpha: no`. El 15 d'octubre de 2026 vaig executar aquesta ordre sobre les icones declarades als app.json de Solys, TradaZen i Nolera: totes responen `no`, en 1024 x 1024.

També vaig fabricar una icona de prova: un quadrat blau totalment opac, però desat amb un canal alfa. `sips` respon `yes`. **Cap píxel és transparent, i tanmateix el canal hi és.** Per això tants desenvolupadors escriuen «la meva icona no té cap transparència» sota aquest missatge.

A Previsualització, l'inspector (Eines, Mostrar l'inspector) també llista les propietats de la imatge, entre elles el canal alfa.

## Corregir: exportar la icona sense canal alfa

Tres mètodes, del més senzill al més precís.

**1. Previsualització.** Fitxer, Exportar, format PNG, i després desmarca la casella Alfa. El fitxer exportat ja no té canal alfa.

**2. sips, sense instal·lar res.** `sips` no treu el canal alfa d'un PNG. Cal passar per un JPEG, que no en té:

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

Amb la meva icona de prova de cantonades transparents, les cantonades s'han tornat blanques i l'última línia respon `no`. El pas pel JPEG comprimeix una mica la imatge, fins i tot a la qualitat màxima: mira el resultat de prop.

**3. ImageMagick.** Si el tens instal·lat, tries el color de fons:

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

Segons la [documentació d'ImageMagick](https://imagemagick.org/command-line-options/#alpha), `-alpha remove` posa la imatge sobre el color de fons, i `-alpha off` desactiva el canal.

Aquests tres mètodes omplen la transparència amb un color llis. Si el teu logo flotava sobre un fons transparent, el més net és reprendre el fitxer original i dibuixar-hi un fons de debò. Expo ho demana a la seva [guia de la icona d'app](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): la icona ha d'omplir tot el quadrat, sense cantonades arrodonides ni píxels transparents. iOS aplica la màscara pel seu compte.

## D'on treu Expo la teva icona, i què en fa

Expo llegeix primer `ios.icon` i després el camp `icon` a l'arrel de la configuració. Segons la [referència de la configuració d'Expo](https://docs.expo.dev/versions/latest/config/app/), `ios.icon` accepta tres formes: un PNG, un objecte amb variants `light`, `dark` i `tinted`, o una carpeta `.icon` creada amb Icon Composer.

La taula següent ve del codi que genera la icona d'iOS al prebuild, `@expo/prebuild-config` 57.0.16 (SDK 57), llegit el 15 d'octubre de 2026:

| El que declares          | El que fa el prebuild    | Risc ITMS-90717  |
| ------------------------ | ------------------------ | ---------------- |
| `icon` en PNG            | Aplanat sobre fons blanc | Baix             |
| `ios.icon.light`         | Aplanat sobre fons blanc | Baix             |
| `ios.icon.tinted`        | Aplanat sobre fons blanc | Baix             |
| `ios.icon.dark`          | Transparència conservada | Volgut per Apple |
| `ios.icon` en `.icon`    | Copiat tal qual          | Real             |
| Carpeta `ios` versionada | Prebuild no executat     | Real             |

**Amb un PNG, Expo mateix treu la transparència i la substitueix per blanc.** Un logo retallat acaba, doncs, sobre un quadrat blanc: cap error, però un resultat que potser no volies. La variant fosca conserva la transparència, i és volgut: Apple demana un fons transparent per a la icona fosca, perquè hi aparegui el fons que proporciona el sistema.

A Nolera, que declara les tres variants, `sips` respon `no` per a la icona clara i la tenyida generades, i `yes` per a la fosca. Segons la data del commit d'aquestes variants, la versió 1.0.2, publicada, les inclou. No ho he comprovat al seu IPA.

### El cas de la carpeta ios versionada

És la causa més probable amb Expo. La [pàgina d'Expo sobre la generació nativa contínua](https://docs.expo.dev/workflow/continuous-native-generation/) ho diu: si el teu projecte conté les carpetes `android` i `ios`, EAS Build no executa el prebuild. **Llavors el teu app.json ja no toca la icona**: és el PNG de la carpeta `ios` el que arriba a Apple.

Comprova-ho des de l'arrel del projecte:

```bash
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
```

Si l'ordre respon `yes` per a la icona 1024, substitueix aquest fitxer per la teva versió opaca, amb el mateix nom. Si no has fet cap modificació nativa a mà, també pots esborrar la carpeta `ios` i afegir-la al `.gitignore`: EAS la regenerarà a cada build. A Solys, TradaZen i Nolera, git ignora aquesta carpeta.

## El format d'iOS 26: Icon Composer

Icon Composer és l'eina d'Apple per a les icones Liquid Glass d'iOS 26. Genera un sol fitxer `.icon` amb diverses capes. Segons la [guia d'Apple sobre Icon Composer](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer), Xcode en treu també les imatges per a les versions d'iOS més antigues.

Expo ho suporta des de l'SDK 54. Declares la carpeta com a text, mai dins l'objecte de variants:

```json
{
  "expo": {
    "ios": {
      "icon": "./assets/app.icon"
    }
  }
}
```

En aquest cas, el prebuild copia la carpeta sense tocar-la, i és Xcode qui fabrica la icona final. Per tant, cal Xcode 26 o posterior, el de les imatges EAS recents, com explico a la guia sobre [ITMS-90725](https://devoria.fr/ca/blog/itms-90725-sdk-version-issue-expo).

Des de l'agost de 2025, al fòrum de desenvolupadors d'Apple, hi ha fils que reporten ITMS-90717 amb fitxers `.icon`. Les pistes que s'hi apunten: una capa PNG transparent, una capa més gran que el llenç, un grup amb l'efecte Blur a prop de la vora. Les solucions provisionals citades: desactivar el Blur, mantenir un fons ple o tornar a un PNG. Aquests fils no donen cap correcció oficial d'Apple, i l'error encara es reportava l'agost de 2026.

Les [normes d'Apple sobre les icones](https://developer.apple.com/design/human-interface-guidelines/app-icons) van en aquesta línia: si importes una capa de fons, ha de cobrir tota la superfície i ser opaca. Les meves apps encara fan servir un PNG, així que no he provat Icon Composer en producció. **Si un fitxer `.icon` bloqueja el teu enviament, torna a posar un PNG a `ios.icon`**: Expo l'aplanarà, i la teva icona passarà aquest control.

## Comprovar la icona al build final

A l'IPA, la icona 1024 no és un fitxer PNG: Xcode la compila dins `Assets.car`. Descarrega l'IPA des de la pàgina del build a expo.dev i executa:

```bash
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
```

Cada icona mostra un camp `Opaque`. El 15 d'octubre de 2026 vaig compilar amb `actool`, l'eina de Xcode, la icona de Solys i la meva icona de prova de cantonades transparents. La primera surt amb `"Opaque" : true`, la segona amb `"Opaque" : false`. Apple no documenta aquest camp: pren-lo com un indici, no com el control d'Apple.

Un parany que cal conèixer: **no provis amb `sips` els PNG petits col·locats a l'arrel de l'app.** Xcode els escriu amb canal alfa, fins i tot quan l'original és opac. A la meva prova amb la icona de Solys, `sips` respon `yes` per a aquests.

## Els altres errors d'icona

| Codi       | El que assenyala Apple | Pista amb Expo       |
| ---------- | ---------------------- | -------------------- |
| ITMS-90717 | Icona 1024 transparent | Exportar sense alfa  |
| ITMS-90704 | Icona 1024 absent      | Falta l'entrada 1024 |
| ITMS-90022 | Icona d'iPhone absent  | Catàleg incomplet    |
| ITMS-90023 | Icona d'iPad absent    | Catàleg incomplet    |

Els tres últims missatges són sobretot del 2017 i el 2018, quan Xcode 9 va canviar les regles de les icones.

Amb Expo, s'han tornat rars. El prebuild escriu una sola icona universal de 1024, i Xcode genera les altres mides. Sense icona declarada, Expo fins i tot crea un quadrat blanc, per evitar una fallada en l'enviament. **Si et surt algun d'aquests errors, mira la carpeta `ios` versionada**: el fitxer `Contents.json` d'`AppIcon.appiconset` ha de contenir una entrada de mida `1024x1024`, i el PNG que cita ha d'existir.

## Abans del teu proper enviament

Una icona es corregeix en deu minuts, però cada error et costa un build. Els altres controls automàtics demanen el mateix rigor, com [ITMS-90683](https://devoria.fr/ca/blog/itms-90683-missing-purpose-string-expo) per a les frases de permís o [ITMS-91053](https://devoria.fr/ca/blog/itms-91053-missing-api-declaration-expo) per al manifest de privacitat. Un cop acceptat el build, instal·la'l amb [TestFlight](https://devoria.fr/ca/blog/testflight-provar-app-iphone-abans-enviar) per veure la teva icona a la pantalla d'inici.

Els rebuigs d'un revisor demanen més perspectiva: el procés és a la pàgina [app rebutjada per Apple](https://devoria.fr/ca/expertise/aplicacio-rebutjada-per-apple), i els motius més freqüents són a [per què Apple rebutja una app](https://devoria.fr/ca/blog/rebuig-apple-per-que-rebutgen-app).

Per revisar el teu projecte abans de l'enviament, el [Review Kit](https://devoria.fr/ca/kits/app-review) reuneix la meva checklist i skills de Claude Code que rellegeixen el teu projecte. Si el teu enviament es bloqueja i vols una mirada humana, [reserva una hora amb mi](https://devoria.fr/ca/coaching): repassem el teu projecte per videotrucada, a la teva pantalla. I si prepares el teu primer llançament, [fes el teu diagnòstic gratuït](https://devoria.fr/ca/diagnostic): posa els passos en ordre i t'envia la meva checklist antirebuig d'Apple.

## Preguntes freqüents

### Per què Apple veu un canal alfa si la meva icona no té cap transparència?

Perquè un PNG pot conservar un canal alfa encara que tots els píxels siguin opacs. Moltes eines l'afegeixen per defecte en exportar. Comprova-ho amb `sips -g hasAlpha` i torna a exportar la icona sense aquest canal.

### Es pot corregir ITMS-90717 amb una actualització remota?

No. La icona està compilada dins el binari, a `Assets.car`. Una actualització remota només canvia el JavaScript i els recursos de l'app. Corregeix la icona, torna a fer un build i torna'l a enviar.

### La icona fosca pot ser transparent?

Sí. Apple demana un fons transparent per a la variant fosca, i Expo en conserva la transparència. En dedueixo que el control apunta a la icona principal, la de l'App Store: és aquesta la que ha de ser opaca.

### Cal arrodonir les cantonades de la icona d'iOS?

No. Proporciona un quadrat ple: iOS aplica la màscara pel seu compte. Les cantonades arrodonides deixen píxels transparents als angles, exactament el que rebutja aquest control.

### Expo suporta les icones d'Icon Composer d'iOS 26?

Sí, des de l'SDK 54: declara la ruta de la carpeta `.icon` a `ios.icon`, com a text. El prebuild la copia tal qual i Xcode 26 la compila. Si et surt ITMS-90717 amb aquest format, revisa les capes transparents i l'efecte Blur, o torna provisionalment a un PNG.


## El teu projecte

[Review Kit](https://devoria.fr/ca/kits/app-review): La meva checklist de revisió de l'App Store, els rebutjos d'Apple que he corregit, la de Google Play i tres skills de Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/ca/kits/ios): Crea la teva app d'iPhone i Android amb Claude Code: el codi de partida de les meves apps, el camí fins a les botigues i tots els kits. 99 €.

[Diagnòstic: què et separa de la teva app d'iPhone](https://devoria.fr/ca/diagnostic): 7 preguntes, 60 segons: sabràs què et bloqueja de debò per publicar la teva app d'iPhone, el teu recorregut en 4 etapes i el kit que et toca.
