# ITMS-90717: oprava „Invalid large app icon“ v Expo

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

Původní stránka: [ITMS-90717: oprava „Invalid large app icon“ v Expo](https://devoria.fr/cs/blog/itms-90717-invalid-large-app-icon-expo)
Autor: [Mehdi Azizi](https://devoria.fr/cs/mehdi-azizi)
Publikováno: 2026-11-04
Poslední revize obsahu: 2026-11-04


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

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

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

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í:

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

Podle [dokumentace ImageMagick](https://imagemagick.org/command-line-options/#alpha) `-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](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): 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](https://docs.expo.dev/versions/latest/config/app/) 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](https://docs.expo.dev/workflow/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:

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

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

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

```bash
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](https://devoria.fr/cs/blog/itms-90683-missing-purpose-string-expo) u textů k oprávněním nebo [ITMS-91053](https://devoria.fr/cs/blog/itms-91053-missing-api-declaration-expo) u privacy manifestu. Jakmile je build přijatý, nainstaluj si ho přes [TestFlight](https://devoria.fr/cs/blog/testflight-testovani-iphone-aplikace) 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](https://devoria.fr/cs/expertise/aplikace-zamitnuta-applem) a nejčastější důvody v článku [proč Apple zamítá aplikace](https://devoria.fr/cs/blog/apple-zamitl-aplikaci-duvody).

Abys mohl svůj projekt zkontrolovat před odesláním, [Review Kit](https://devoria.fr/cs/kits/app-review) 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](https://devoria.fr/cs/coaching): projdeme tvůj projekt na videohovoru, na tvé obrazovce. A pokud chystáš své první vydání, [udělej si bezplatnou diagnostiku](https://devoria.fr/cs/diagnostic): 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.


## Tvůj projekt

[Review Kit](https://devoria.fr/cs/kits/app-review): Můj checklist pro review v App Store, moje opravená zamítnutí od Applu, checklist pro Google Play a tři skilly pro Claude Code. 1 199 Kč.

[iOS & Android Kit](https://devoria.fr/cs/kits/ios): Vytvoř si aplikaci pro iPhone a Android s Claude Code: startovní kód mých aplikací, cesta až do obchodů a všechny kity. 2 399 Kč.

[Diagnostika: co tě dělí od tvé iPhone aplikace](https://devoria.fr/cs/diagnostic): 7 otázek, 60 sekund: zjistíš, co ti doopravdy brání vydat iPhone aplikaci, dostaneš cestu ve 4 krocích a kit přesně pro tebe.
