ITMS-90717: popravi »Invalid large app icon« v Expo
Avtor: Mehdi Azizi
Objavljeno , 8 min
ITMS-90717: ikona 1024 x 1024 v tvojem buildu ima prosojnost ali kanal alfa. Izvozi jo neprosojno, preveri s sips in naredi nov build.
ITMS-90717 je Applov samodejni pregled tvojega builda. Pove, da velika ikona aplikacije, tista s 1024 x 1024 piksli, ki jo prikazuje App Store, vsebuje prosojnost ali kanal alfa. Rešitev: kvadratna in neprosojna ikona, izvožena brez kanala alfa, nato pa nov build.
Pri Expo tvoja datoteka PNG le redko povzroča težavo: prebuild jo že postavi na belo ozadje. To kodo sem prebral v SDK 57 in preveril ikone aplikacij Solys, TradaZen in Nolera. Napaka takrat najpogosteje izvira iz mape ios, ki je v gitu, ali iz datoteke Icon Composer. Takole ugotoviš, kaj od tega, in to popraviš.
Kaj pomeni napaka ITMS-90717?
Sporočilo ima naslov „ITMS-90717: Invalid large app icon“. Navaja, da velika ikona v katalogu slik tvoje aplikacije „can't be transparent or contain an alpha channel“: ne sme biti prosojna in ne sme vsebovati kanala alfa. Starejša sporočila so govorila o „Invalid App Store Icon“. Gre za isto pravilo.
Ta velika ikona je ikona za App Store. Dokumentacija Xcode o ikonah to pojasnjuje: aplikacija, ki se distribuira prek App Store, mora v katalogu slik imeti ikono velikosti 1024 točk.
Kanal alfa je četrta plast PNG-ja, poleg rdeče, zelene in modre. V njem je shranjena prosojnost vsakega piksla. Ikona je lahko videti povsem polna in ima ta kanal še vedno: to je past, ki se ponavlja v vseh forumskih nitih.
Kot pri drugih napakah ITMS tudi to ni zavrnitev reviewerja. Apple je binarno datoteko analiziral ob oddaji. Odvisno od orodja za pošiljanje se napaka pokaže kot neuspešna validacija, na primer s kodo 409.
Preveri ikono s sips
Na Macu je sips nameščen že privzeto. Dovolj je ena vrstica:
sips -g hasAlpha assets/icon.png
Želiš videti hasAlpha: no. 15. oktobra 2026 sem ta ukaz pognal na ikonah, navedenih v app.json aplikacij Solys, TradaZen in Nolera: vse vrnejo no, v velikosti 1024 x 1024.
Naredil sem tudi testno ikono: povsem neprosojen moder kvadrat, a shranjen s kanalom alfa. sips vrne yes. Noben piksel ni prosojen, kanal pa je kljub temu tam. Zato toliko razvijalcev pod tem sporočilom piše „moja ikona nima nobene prosojnosti“.
V aplikaciji Preview inšpektor (Tools, Show Inspector) prav tako navede lastnosti slike, med njimi kanal alfa.
Popravek: izvozi ikono brez kanala alfa
Tri metode, od najpreprostejše do najnatančnejše.
1. Preview. File, Export, format PNG, nato odkljukaj polje Alpha. Izvožena datoteka nima več kanala alfa.
2. sips, brez nameščanja česarkoli. sips iz PNG-ja ne odstrani kanala alfa. Iti moraš prek JPEG-a, ki ga nima:
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
Na moji testni ikoni s prosojnimi vogali so vogali postali beli, zadnja vrstica pa vrne no. Prehod prek JPEG-a sliko malo stisne, tudi pri največji kakovosti: rezultat si dobro oglej.
3. ImageMagick. Če ga imaš nameščenega, si sam izbereš barvo ozadja:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Po dokumentaciji ImageMagick -alpha remove postavi sliko na barvo ozadja, -alpha off pa izklopi kanal.
Vse tri metode zapolnijo prosojnost z enotno barvo. Če je tvoj logotip lebdel na prosojnem ozadju, je najčistejše, da odpreš izvorno datoteko in vanjo narišeš pravo ozadje. Expo to zahteva v svojem vodiču za ikono aplikacije: ikona mora zapolniti cel kvadrat, brez zaobljenih vogalov ali prosojnih pikslov. iOS sam uporabi masko.
Kje Expo vzame tvojo ikono in kaj z njo naredi
Expo najprej prebere ios.icon, nato polje icon v korenu tvoje konfiguracije. Po referenci konfiguracije Expo ios.icon sprejme tri oblike: PNG, objekt z različicami light, dark in tinted ali mapo .icon, ustvarjeno z Icon Composer.
Naslednja tabela izhaja iz kode, ki med prebuildom ustvari ikono za iOS, @expo/prebuild-config 57.0.16 (SDK 57), prebrane 15. oktobra 2026:
| Kaj navedeš | Kaj naredi prebuild | Tveganje ITMS-90717 |
|---|---|---|
icon kot PNG | Sploščeno na belo ozadje | Nizko |
ios.icon.light | Sploščeno na belo ozadje | Nizko |
ios.icon.tinted | Sploščeno na belo ozadje | Nizko |
ios.icon.dark | Prosojnost ohranjena | Kot želi Apple |
ios.icon kot .icon | Kopirano, kot je | Resnično |
Mapa ios v gitu | Prebuild se ne zažene | Resnično |
Pri PNG-ju Expo sam odstrani prosojnost in jo nadomesti z belo. Izrezan logotip tako konča na belem kvadratu: brez napake, a z videzom, ki ga morda nisi želel. Temna različica ohrani prosojnost, in to namerno: Apple za temno ikono zahteva prosojno ozadje, da se pokaže ozadje, ki ga zagotovi sistem.
Pri Noleri, ki navaja vse tri različice, sips vrne no za ustvarjeno svetlo in obarvano ikono ter yes za temno. Glede na datum commita teh različic jih vsebuje objavljena različica 1.0.2. V njenem IPA tega nisem preveril.
Primer mape ios v gitu
To je pri Expo najverjetnejši vzrok. Stran Expo o neprekinjenem generiranju nativne kode pravi: če tvoj projekt vsebuje mapi android in ios, EAS Build ne zažene prebuilda. Tvoj app.json takrat ikone ne spreminja več: Applu se pošlje PNG iz mape ios.
Preveri to iz korena projekta:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
Če ukaz za ikono 1024 vrne yes, to datoteko zamenjaj s svojo neprosojno različico, z istim imenom. Če nisi ročno spreminjal nativne kode, lahko mapo ios tudi izbrišeš in jo dodaš v .gitignore: EAS jo bo ustvaril ob vsakem buildu. Pri Solys, TradaZen in Noleri git to mapo ignorira.
Format za iOS 26: Icon Composer
Icon Composer je Applovo orodje za ikone Liquid Glass v iOS 26. Ustvari eno samo datoteko .icon z več plastmi. Po Applovem vodiču za Icon Composer Xcode iz nje izdela tudi slike za starejše različice iOS.
Expo ga podpira od SDK 54. Mapo navedeš kot besedilo, nikoli v objektu z različicami:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
V tem primeru prebuild mapo kopira, ne da bi jo spreminjal, končno ikono pa izdela Xcode. Potrebuješ torej Xcode 26 ali novejši, tistega iz novejših slik EAS, kot razlagam v vodiču o ITMS-90725.
Od avgusta 2025 niti na Applovem forumu za razvijalce poročajo o ITMS-90717 pri datotekah .icon. Omenjeni možni vzroki: prosojna plast PNG, plast, večja od platna, skupina z učinkom Blur blizu roba. Omenjene rešitve: izklopiti Blur, ohraniti polno ozadje ali se vrniti na PNG. Te niti ne navajajo nobenega uradnega Applovega popravka, napaka pa je bila prijavljena še avgusta 2026.
Applova pravila za ikone gredo v isto smer: če uvoziš plast ozadja, mora pokriti celo površino in biti neprosojna. Moje aplikacije še vedno uporabljajo PNG, zato Icon Composerja v produkciji nisem preizkusil. Če datoteka .icon blokira tvojo oddajo, preklopi ios.icon nazaj na PNG: Expo ga bo sploščil in tvoja ikona bo prestala ta pregled.
Preveri ikono v končnem buildu
V IPA ikona 1024 ni datoteka PNG: Xcode jo prevede v Assets.car. Prenesi IPA s strani builda na expo.dev, nato poženi:
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
Vsaka ikona prikaže polje Opaque. 15. oktobra 2026 sem z actool, orodjem Xcode, prevedel ikono Solysa in svojo testno ikono s prosojnimi vogali. Prva ima "Opaque" : true, druga "Opaque" : false. Apple tega polja ne dokumentira: vzemi ga kot namig, ne kot Applov pregled.
Past, ki jo moraš poznati: majhnih PNG-jev v korenu aplikacije ne preverjaj s sips. Xcode jih zapiše s kanalom alfa, tudi ko je vir neprosojen. Pri mojem testu z ikono Solysa sips zanje vrne yes.
Druge napake z ikonami
| Koda | Kaj javi Apple | Smer pri Expo |
|---|---|---|
| ITMS-90717 | Prosojna ikona 1024 | Izvoz brez alfa |
| ITMS-90704 | Manjka ikona 1024 | Manjka vnos 1024 |
| ITMS-90022 | Manjka ikona za iPhone | Nepopoln katalog |
| ITMS-90023 | Manjka ikona za iPad | Nepopoln katalog |
Zadnja tri sporočila izvirajo predvsem iz let 2017 in 2018, ko je Xcode 9 spremenil pravila za ikone.
Pri Expo so postala redka. Prebuild zapiše eno samo univerzalno ikono 1024, druge velikosti pa ustvari Xcode. Če ikone ne navedeš, Expo celo ustvari bel kvadrat, da se izogne neuspehu ob oddaji. Če naletiš na katero od teh napak, poglej mapo ios v gitu: datoteka Contents.json v AppIcon.appiconset mora vsebovati vnos velikosti 1024x1024, PNG, ki ga navaja, pa mora obstajati.
Pred naslednjo oddajo
Ikono popraviš v desetih minutah, a vsaka napaka stane en build. Drugi samodejni pregledi zahtevajo enako natančnost, na primer ITMS-90683 za besedila dovoljenj ali ITMS-91053 za manifest zasebnosti. Ko je build sprejet, ga namesti prek TestFlight, da vidiš ikono na svojem domačem zaslonu.
Zavrnitve reviewerja zahtevajo več premisleka: postopek je na strani aplikacija, ki jo je Apple zavrnil, najpogostejši razlogi pa so v članku zakaj Apple zavrne aplikacijo.
Da preveriš svoj projekt pred oddajo, Review Kit združuje moj kontrolni seznam in skille za Claude Code, ki pregledajo tvoj projekt. Če se ti oddaja zatika in želiš človeški pogled, rezerviraj uro z mano: tvoj projekt pregledava na video klicu, na tvojem zaslonu. Če pa pripravljaš svojo prvo objavo, opravi brezplačno diagnostiko: koraki se ti razvrstijo po vrsti, dobiš pa tudi moj kontrolni seznam proti Applovim zavrnitvam.
Pogosta vprašanja
Zakaj Apple vidi kanal alfa, čeprav moja ikona nima nobene prosojnosti?
Ker PNG lahko obdrži kanal alfa, tudi ko so vsi njegovi piksli neprosojni. Veliko orodij ga ob izvozu privzeto doda. Preveri s sips -g hasAlpha, nato ikono znova izvozi brez tega kanala.
Ali lahko ITMS-90717 popravim s posodobitvijo na daljavo?
Ne. Ikona je prevedena v binarno datoteko, v Assets.car. Posodobitev na daljavo spremeni le JavaScript in vire aplikacije. Popravi ikono, naredi nov build in ga znova pošlji.
Ali je temna ikona lahko prosojna?
Da. Apple za temno različico zahteva prosojno ozadje, Expo pa njeno prosojnost ohrani. Iz tega sklepam, da pregled velja za glavno ikono, tisto za App Store: ta mora biti neprosojna.
Ali moram zaobliti vogale ikone za iOS?
Ne. Zagotovi poln kvadrat: iOS sam uporabi masko. Zaobljeni vogali pustijo v kotih prosojne piksle, točno to, kar ta pregled zavrne.
Ali Expo podpira ikone Icon Composer za iOS 26?
Da, od SDK 54: pot do mape .icon navedi v ios.icon, kot besedilo. Prebuild jo kopira, kot je, Xcode 26 pa jo prevede. Če se pri tem formatu pojavi ITMS-90717, preveri prosojne plasti in učinek Blur ali se začasno vrni na PNG.

