ITMS-90717: corregir «Invalid large app icon» amb Expo
Per Mehdi Azizi
Publicat el , 8 min
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.
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 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:
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é:
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:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Segons la documentació d'ImageMagick, -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: 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, 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 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:
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, 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:
{
"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.
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 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:
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 per a les frases de permís o ITMS-91053 per al manifest de privacitat. Un cop acceptat el build, instal·la'l amb TestFlight 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, i els motius més freqüents són a per què Apple rebutja una app.
Per revisar el teu projecte abans de l'enviament, el Review Kit 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: 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: 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.

