ITMS-90717: oprava „Invalid large app icon“ v Expo
Autor: Mehdi Azizi
Publikováno , 8 min
ITMS-90717: ikona 1024 x 1024 ve tvém buildu má průhlednost nebo alfa kanál. Exportuj ji neprůhlednou, ověř přes sips a udělej nový build.
ITMS-90717 je automatická kontrola, kterou Apple provádí na tvém buildu. Říká, že velká ikona aplikace, ta o rozměru 1024 x 1024 pixelů, kterou zobrazuje App Store, obsahuje průhlednost nebo alfa kanál. Oprava: čtvercová neprůhledná ikona exportovaná bez alfa kanálu a pak nový build.
S Expo je viníkem tvůj PNG soubor jen zřídka: prebuild ho už sám položí na bílé pozadí. Prošel jsem ten kód v SDK 57 a zkontroloval ikony aplikací Solys, TradaZen a Nolera. Chyba pak nejčastěji pochází z verzované složky ios nebo ze souboru z Icon Composeru. Ukážu ti, jak zjistit, co z toho to je, a jak to opravit.
Co znamená chyba ITMS-90717?
Zpráva má název „ITMS-90717: Invalid large app icon“. Upřesňuje, že velká ikona v katalogu obrázků tvé aplikace „can't be transparent or contain an alpha channel“: nesmí být průhledná ani obsahovat alfa kanál. Starší zprávy mluvily o „Invalid App Store Icon“. Jde o stejné pravidlo.
Tahle velká ikona je ta pro App Store. Vysvětluje to dokumentace Xcode k ikonám: aplikace distribuovaná přes App Store musí mít ve svém katalogu obrázků ikonu o velikosti 1024 bodů.
Alfa kanál je čtvrtá vrstva PNG vedle červené, zelené a modré. Ukládá průhlednost každého pixelu. Ikona může vypadat plně a ten kanál si přesto ponechat: právě tahle past se objevuje ve všech vláknech na fórech.
Stejně jako u ostatních chyb ITMS nejde o zamítnutí od revieweru. Apple analyzoval binárku při doručení. Podle nástroje, kterým build posíláš, se chyba ukáže jako neúspěšná validace, třeba s kódem 409.
Ověř ikonu pomocí sips
Na Macu je sips nainstalovaný rovnou. Stačí jeden řádek:
sips -g hasAlpha assets/icon.png
Chceš vidět hasAlpha: no. 15. října 2026 jsem ten příkaz spustil na ikony uvedené v app.json aplikací Solys, TradaZen a Nolera: všechny odpověděly no, v rozměru 1024 x 1024.
Vyrobil jsem si i testovací ikonu: modrý čtverec, úplně neprůhledný, ale uložený s alfa kanálem. sips odpoví yes. Žádný pixel není průhledný, a kanál tam přesto je. Proto tolik vývojářů pod tou zprávou píše „moje ikona nemá žádnou průhlednost“.
V Náhledu (Preview) ukazuje inspektor (Tools, Show Inspector) taky vlastnosti obrázku, včetně alfa kanálu.
Oprava: exportuj ikonu bez alfa kanálu
Tři metody, od nejjednodušší po nejpřesnější.
1. Náhled. File, Export, formát PNG a odškrtni políčko Alpha. Exportovaný soubor už alfa kanál nemá.
2. sips, bez instalace čehokoli. sips z PNG alfa kanál neodstraní. Musíš to vzít přes JPEG, který žádný nemá:
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
U mé testovací ikony s průhlednými rohy rohy zbělaly a poslední řádek odpověděl no. Průchod přes JPEG obrázek trochu zkomprimuje, i při maximální kvalitě: výsledek si pořádně prohlédni.
3. ImageMagick. Pokud ho máš nainstalovaný, vybereš si barvu pozadí:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Podle dokumentace ImageMagick -alpha remove položí obrázek na barvu pozadí a -alpha off kanál vypne.
Všechny tři metody vyplní průhlednost jednolitou barvou. Pokud tvoje logo plavalo na průhledném pozadí, nejčistší je vzít zdrojový soubor a nakreslit do něj skutečné pozadí. Expo to vyžaduje ve svém návodu k ikoně aplikace: ikona musí vyplnit celý čtverec, bez zaoblených rohů a bez průhledných pixelů. Masku si iOS aplikuje sám.
Odkud Expo bere tvou ikonu a co s ní dělá
Expo čte nejdřív ios.icon a pak pole icon v kořeni tvé konfigurace. Podle reference konfigurace Expo přijímá ios.icon tři podoby: PNG, objekt s variantami light, dark a tinted, nebo složku .icon vytvořenou v Icon Composeru.
Následující tabulka vychází z kódu, který při prebuildu generuje ikonu pro iOS, @expo/prebuild-config 57.0.16 (SDK 57), čteno 15. října 2026:
| Co deklaruješ | Co udělá prebuild | Riziko ITMS-90717 |
|---|---|---|
icon jako PNG | Sloučí na bílé pozadí | Nízké |
ios.icon.light | Sloučí na bílé pozadí | Nízké |
ios.icon.tinted | Sloučí na bílé pozadí | Nízké |
ios.icon.dark | Ponechá průhlednost | Záměr Applu |
ios.icon jako .icon | Zkopíruje beze změny | Skutečné |
Verzovaná složka ios | Prebuild se nespustí | Skutečné |
S PNG Expo průhlednost odstraní samo a nahradí ji bílou. Vyříznuté logo tak skončí na bílém čtverci: žádná chyba, ale vzhled, který jsi možná nechtěl. Tmavá varianta si průhlednost ponechává, a je to záměr: Apple chce u tmavé ikony průhledné pozadí, aby prosvítalo pozadí dodané systémem.
U Nolery, která deklaruje všechny tři varianty, sips odpoví no pro vygenerovanou světlou a tónovanou ikonu a yes pro tmavou. Podle data commitu těchto variant je obsahuje verze 1.0.2, která je venku. V jejím IPA jsem to neověřoval.
Případ verzované složky ios
U Expo je to nejpravděpodobnější příčina. Říká to stránka Expo o continuous native generation: pokud tvůj projekt obsahuje složky android a ios, EAS Build prebuild nespustí. Tvůj app.json pak na ikonu už nemá vliv: k Applu odchází PNG ze složky ios.
Zkontroluj to z kořene projektu:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
Pokud příkaz u ikony 1024 odpoví yes, nahraď ten soubor svou neprůhlednou verzí pod stejným názvem. Pokud jsi ručně neudělal žádné nativní úpravy, můžeš taky složku ios smazat a přidat ji do .gitignore: EAS ji vygeneruje znovu při každém buildu. U Solys, TradaZen a Nolery git tuhle složku ignoruje.
Formát iOS 26: Icon Composer
Icon Composer je nástroj Applu pro ikony Liquid Glass v iOS 26. Vytváří jediný vícevrstvý soubor .icon. Podle návodu Applu k Icon Composeru z něj Xcode vyrobí i obrázky pro starší verze iOS.
Expo ho podporuje od SDK 54. Složku deklaruješ jako text, nikdy ne v objektu s variantami:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
V tom případě prebuild složku zkopíruje, aniž by na ni sáhl, a finální ikonu vyrobí Xcode. Potřebuješ tedy Xcode 26 nebo novější, ten z novějších obrazů EAS, jak vysvětluju v návodu k ITMS-90725.
Od srpna 2025 se na vývojářském fóru Applu objevují vlákna hlásící ITMS-90717 se soubory .icon. Zmiňované stopy: průhledná PNG vrstva, vrstva větší než plátno, skupina s efektem Blur u okraje. Uváděná obejití: vypnout Blur, ponechat plné pozadí, nebo se vrátit k PNG. Tato vlákna žádnou oficiální opravu od Applu neuvádějí a chyba se hlásila ještě v srpnu 2026.
Stejným směrem jdou i pravidla Applu pro ikony: pokud importuješ vrstvu pozadí, musí pokrývat celou plochu a být neprůhledná. Moje aplikace ještě používají PNG, takže jsem Icon Composer v produkci netestoval. Pokud ti soubor .icon blokuje odeslání, přepni ios.icon zpátky na PNG: Expo ho sloučí a tvoje ikona touhle kontrolou projde.
Ověř ikonu ve finálním buildu
V IPA není ikona 1024 PNG soubor: Xcode ji zkompiluje do Assets.car. Stáhni IPA ze stránky buildu na expo.dev a spusť:
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
Každá ikona ukazuje pole Opaque. 15. října 2026 jsem nástrojem Xcode actool zkompiloval ikonu Solys a svou testovací ikonu s průhlednými rohy. První vyšla jako "Opaque" : true, druhá jako "Opaque" : false. Apple tohle pole nedokumentuje: ber ho jako vodítko, ne jako kontrolu Applu.
Past, o které bys měl vědět: netestuj pomocí sips malé PNG soubory v kořeni aplikace. Xcode je zapisuje s alfa kanálem, i když je zdroj neprůhledný. V mém testu s ikonou Solys u nich sips odpovídá yes.
Další chyby ikon
| Kód | Co Apple hlásí | Stopa u Expo |
|---|---|---|
| ITMS-90717 | Průhledná ikona 1024 | Export bez alfa |
| ITMS-90704 | Chybí ikona 1024 | Chybí záznam 1024 |
| ITMS-90022 | Chybí ikona pro iPhone | Neúplný katalog |
| ITMS-90023 | Chybí ikona pro iPad | Neúplný katalog |
Poslední tři zprávy pocházejí hlavně z let 2017 a 2018, kdy Xcode 9 změnil pravidla pro ikony.
S Expo jsou dnes vzácné. Prebuild zapíše jedinou univerzální ikonu 1024 a ostatní velikosti vygeneruje Xcode. Když žádnou ikonu nedeklaruješ, Expo dokonce vytvoří bílý čtverec, aby odeslání nespadlo. Pokud některá z těchto chyb přijde, podívej se do verzované složky ios: soubor Contents.json v AppIcon.appiconset musí obsahovat záznam o velikosti 1024x1024 a PNG, na který odkazuje, musí existovat.
Před dalším odesláním
Ikonu opravíš za deset minut, ale každá chyba tě stojí jeden build. Ostatní automatické kontroly chtějí stejnou pečlivost, třeba ITMS-90683 u textů k oprávněním nebo ITMS-91053 u privacy manifestu. Jakmile je build přijatý, nainstaluj si ho přes TestFlight a podívej se na ikonu na své ploše.
Zamítnutí od revieweru chtějí víc odstupu: postup najdeš na stránce aplikace zamítnutá Applem a nejčastější důvody v článku proč Apple zamítá aplikace.
Abys mohl svůj projekt zkontrolovat před odesláním, Review Kit obsahuje můj checklist a skills pro Claude Code, které tvůj projekt projdou. Pokud ti odeslání vázne a chceš lidský pohled, zarezervuj si se mnou hodinu: projdeme tvůj projekt na videohovoru, na tvé obrazovce. A pokud chystáš své první vydání, udělej si bezplatnou diagnostiku: seřadí ti kroky a pošle ti můj checklist proti zamítnutí od Applu.
Časté dotazy
Proč Apple vidí alfa kanál, když moje ikona nemá žádnou průhlednost?
Protože PNG si může alfa kanál ponechat, i když jsou všechny jeho pixely neprůhledné. Spousta nástrojů ho při exportu přidává automaticky. Ověř to přes sips -g hasAlpha a pak ikonu znovu exportuj bez toho kanálu.
Dá se ITMS-90717 opravit vzdálenou aktualizací?
Ne. Ikona je zkompilovaná v binárce, v Assets.car. Vzdálená aktualizace mění jen JavaScript a zdroje aplikace. Oprav ikonu, udělej nový build a pošli ho znovu.
Může být tmavá ikona průhledná?
Ano. Apple u tmavé varianty chce průhledné pozadí a Expo jí průhlednost ponechává. Z toho usuzuju, že kontrola míří na hlavní ikonu, tu pro App Store: ta musí být neprůhledná.
Mám ikoně pro iOS zaoblit rohy?
Ne. Dodej plný čtverec: masku si iOS aplikuje sám. Zaoblené rohy nechají v rozích průhledné pixely, přesně to, co tahle kontrola odmítá.
Podporuje Expo ikony z Icon Composeru pro iOS 26?
Ano, od SDK 54: uveď cestu ke složce .icon v ios.icon jako text. Prebuild ji zkopíruje beze změny a Xcode 26 ji zkompiluje. Pokud s tímhle formátem dostaneš ITMS-90717, zkontroluj průhledné vrstvy a efekt Blur, nebo se dočasně vrať k PNG.

