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

> ITMS-90717: ikona 1024 x 1024 v tvojom builde má priehľadnosť alebo alfa kanál. Exportuj ju nepriehľadnú, over cez sips a sprav nový build.

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


ITMS-90717 je automatická kontrola, ktorú Apple robí na tvojom builde. Hovorí, že veľká ikona appky, tá s rozmerom 1024 x 1024 pixelov, ktorú zobrazuje App Store, obsahuje priehľadnosť alebo alfa kanál. **Oprava: štvorcová nepriehľadná ikona exportovaná bez alfa kanála a potom nový build.**

S Expo je tvoj PNG súbor len zriedka vinníkom: prebuild ho už sám položí na biele pozadie. Tento kód som si prečítal v SDK 57 a overil som ikony appiek Solys, TradaZen a Nolera. Chyba potom najčastejšie pochádza z priečinka `ios` vo verziovacom systéme alebo zo súboru z Icon Composer. Tu je postup, ako zistiť, ktorý z nich to je, a ako to opraviť.

## Čo znamená chyba ITMS-90717?

Správa má názov „ITMS-90717: Invalid large app icon“. Upresňuje, že veľká ikona v katalógu obrázkov tvojej appky „can't be transparent or contain an alpha channel“: nesmie byť priehľadná ani obsahovať alfa kanál. Staršie správy hovorili o „Invalid App Store Icon“. Je to to isté pravidlo.

Táto veľká ikona je ikona pre App Store. Vysvetľuje to [dokumentácia Xcode o ikonách](https://developer.apple.com/documentation/xcode/configuring-your-app-icon): appka distribuovaná cez App Store musí mať vo svojom katalógu obrázkov ikonu s veľkosťou 1024 bodov.

Alfa kanál je štvrtá vrstva PNG popri červenej, zelenej a modrej. Ukladá priehľadnosť každého pixelu. **Ikona môže vyzerať úplne plná a ten kanál si napriek tomu ponechať**: to je pasca, ktorá sa opakuje vo všetkých vláknach na fórach.

Ako pri ostatných chybách ITMS, nejde o zamietnutie od reviewera. Apple analyzoval binárku pri doručení. Podľa nástroja, ktorým build posielaš, sa chyba zobrazí ako neúspešná validácia, napríklad s kódom 409.

## Over si ikonu pomocou sips

Na Macu je `sips` nainštalovaný automaticky. Stačí jeden riadok:

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

Chceš vidieť `hasAlpha: no`. 15. októbra 2026 som tento príkaz spustil na ikonách uvedených v app.json appiek Solys, TradaZen a Nolera: všetky odpovedajú `no`, v rozmere 1024 x 1024.

Vyrobil som si aj testovaciu ikonu: modrý štvorec, úplne nepriehľadný, ale uložený s alfa kanálom. `sips` odpovedá `yes`. **Ani jeden pixel nie je priehľadný, a kanál tam napriek tomu je.** Preto toľko vývojárov pod touto správou píše „moja ikona nemá žiadnu priehľadnosť“.

V appke Preview inšpektor (Tools, Show Inspector) tiež vypíše vlastnosti obrázka vrátane alfa kanála.

## Oprava: exportuj ikonu bez alfa kanála

Tri metódy, od najjednoduchšej po najpresnejšiu.

**1. Preview.** File, Export, formát PNG a potom odškrtni políčko Alpha. Exportovaný súbor už alfa kanál nemá.

**2. sips, bez inštalovania čohokoľvek.** `sips` z PNG alfa kanál neodstráni. Treba prejsť cez JPEG, ktorý žiadny 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
```

Na mojej testovacej ikone s priehľadnými rohmi sa rohy zmenili na biele a posledný riadok odpovedá `no`. Prechod cez JPEG obrázok trochu skomprimuje, aj pri maximálnej kvalite: výsledok si pozri zblízka.

**3. ImageMagick.** Ak ho máš nainštalovaný, farbu pozadia si vyberieš sám:

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

Podľa [dokumentácie ImageMagick](https://imagemagick.org/command-line-options/#alpha) `-alpha remove` položí obrázok na farbu pozadia a `-alpha off` kanál vypne.

Všetky tri metódy vyplnia priehľadnosť jednou plnou farbou. Ak tvoje logo plávalo na priehľadnom pozadí, najčistejšie je vrátiť sa k zdrojovému súboru a nakresliť do neho skutočné pozadie. Expo to vyžaduje vo svojom [návode k ikone appky](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): ikona musí vyplniť celý štvorec, bez zaoblených rohov a bez priehľadných pixelov. Masku si iOS aplikuje sám.

## Odkiaľ Expo berie tvoju ikonu a čo s ňou robí

Expo najprv číta `ios.icon`, potom pole `icon` v koreni tvojej konfigurácie. Podľa [referencie konfigurácie Expo](https://docs.expo.dev/versions/latest/config/app/) `ios.icon` prijíma tri formy: PNG, objekt s variantmi `light`, `dark` a `tinted`, alebo priečinok `.icon` vytvorený v Icon Composer.

Nasledujúca tabuľka vychádza z kódu, ktorý pri prebuilde generuje iOS ikonu, `@expo/prebuild-config` 57.0.16 (SDK 57), prečítaného 15. októbra 2026:

| Čo deklaruješ                 | Čo urobí prebuild          | Riziko ITMS-90717 |
| ----------------------------- | -------------------------- | ----------------- |
| `icon` ako PNG                | Zlúčené na biele pozadie   | Nízke             |
| `ios.icon.light`              | Zlúčené na biele pozadie   | Nízke             |
| `ios.icon.tinted`             | Zlúčené na biele pozadie   | Nízke             |
| `ios.icon.dark`               | Priehľadnosť zachovaná     | Chce to tak Apple |
| `ios.icon` ako `.icon`        | Skopírované bez zmeny      | Reálne            |
| Priečinok `ios` vo verziovaní | Prebuild sa znova nespustí | Reálne            |

**S PNG Expo priehľadnosť odstráni sám a nahradí ju bielou.** Vystrihnuté logo teda skončí na bielom štvorci: žiadna chyba, ale vzhľad, ktorý si možno nechcel. Tmavý variant si priehľadnosť ponechá, a je to zámer: Apple pre tmavú ikonu vyžaduje priehľadné pozadie, aby bolo vidieť pozadie od systému.

Pri Nolere, ktorá deklaruje všetky tri varianty, `sips` odpovedá `no` pre vygenerovanú svetlú a tónovanú ikonu a `yes` pre tmavú. Podľa dátumu commitu týchto variantov ich verzia 1.0.2, ktorá je online, obsahuje. V jej IPA som to neoveroval.

### Prípad priečinka ios vo verziovaní

Toto je pri Expo najpravdepodobnejšia príčina. [Stránka Expo o continuous native generation](https://docs.expo.dev/workflow/continuous-native-generation/) to hovorí: ak tvoj projekt obsahuje priečinky `android` a `ios`, EAS Build prebuild nespustí. **Tvoj app.json potom ikonu vôbec neovplyvní**: Apple dostane PNG z priečinka `ios`.

Skontroluj to z koreňa projektu:

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

Ak príkaz pri ikone 1024 odpovie `yes`, nahraď tento súbor svojou nepriehľadnou verziou s rovnakým názvom. Ak si ručne nerobil žiadne natívne úpravy, môžeš priečinok `ios` aj zmazať a pridať ho do `.gitignore`: EAS ho vygeneruje pri každom builde. V Solys, TradaZen aj Nolere tento priečinok git ignoruje.

## Formát iOS 26: Icon Composer

Icon Composer je nástroj od Apple na ikony Liquid Glass v iOS 26. Vytvára jediný súbor `.icon` s viacerými vrstvami. Podľa [návodu Apple k Icon Composer](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer) z neho Xcode vyrobí aj obrázky pre staršie verzie iOS.

Expo ho podporuje od SDK 54. Priečinok deklaruješ ako text, nikdy nie v objekte variantov:

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

V tom prípade prebuild priečinok skopíruje bez zmeny a finálnu ikonu vyrobí Xcode. Potrebuješ teda Xcode 26 alebo novší, ten z novších EAS image, ako to vysvetľujem v návode k [ITMS-90725](https://devoria.fr/sk/blog/itms-90725-sdk-version-issue-expo).

Od augusta 2025 sa na fóre vývojárov Apple objavujú vlákna, ktoré hlásia ITMS-90717 so súbormi `.icon`. Uvádzané možné príčiny: priehľadná PNG vrstva, vrstva väčšia ako plátno, skupina s efektom Blur blízko okraja. Spomínané obchádzky: vypnúť Blur, ponechať plné pozadie alebo sa vrátiť k PNG. Tieto vlákna neprinášajú žiadnu oficiálnu opravu od Apple a chyba sa hlásila ešte v auguste 2026.

[Pravidlá Apple pre ikony](https://developer.apple.com/design/human-interface-guidelines/app-icons) idú rovnakým smerom: ak importuješ vrstvu pozadia, musí pokrývať celú plochu a byť nepriehľadná. Moje appky stále používajú PNG, takže Icon Composer som v produkcii netestoval. **Ak ti súbor `.icon` blokuje odoslanie, prepni `ios.icon` späť na PNG**: Expo ho zlúči a tvoja ikona touto kontrolou prejde.

## Over ikonu vo finálnom builde

V IPA nie je ikona 1024 súborom PNG: Xcode ju skompiluje do `Assets.car`. Stiahni IPA zo stránky buildu na expo.dev a spusti:

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

Každá ikona zobrazí pole `Opaque`. 15. októbra 2026 som pomocou `actool`, nástroja z Xcode, skompiloval ikonu Solys a svoju testovaciu ikonu s priehľadnými rohmi. Prvá vyjde ako `"Opaque" : true`, druhá ako `"Opaque" : false`. Apple toto pole nedokumentuje: ber ho ako indíciu, nie ako kontrolu od Apple.

Pasca, o ktorej treba vedieť: **netestuj pomocou `sips` malé PNG v koreni appky.** Xcode ich zapisuje s alfa kanálom, aj keď je zdroj nepriehľadný. Pri mojom teste s ikonou Solys `sips` pri nich odpovedá `yes`.

## Ostatné chyby ikon

| Kód        | Čo Apple hlási         | Kde hľadať v Expo      |
| ---------- | ---------------------- | ---------------------- |
| ITMS-90717 | Priehľadná ikona 1024  | Exportovať bez alfy    |
| ITMS-90704 | Chýba ikona 1024       | Chýbajúca položka 1024 |
| ITMS-90022 | Chýba ikona pre iPhone | Neúplný katalóg        |
| ITMS-90023 | Chýba ikona pre iPad   | Neúplný katalóg        |

Posledné tri správy pochádzajú hlavne z rokov 2017 a 2018, keď Xcode 9 zmenil pravidlá pre ikony.

S Expo sú dnes zriedkavé. Prebuild zapíše jedinú univerzálnu ikonu 1024 a ostatné veľkosti vygeneruje Xcode. Ak nedeklaruješ žiadnu ikonu, Expo dokonca vytvorí biely štvorec, aby odoslanie nezlyhalo. **Ak ťa niektorá z týchto chýb zasiahne, pozri sa na priečinok `ios` vo verziovaní**: súbor `Contents.json` v `AppIcon.appiconset` musí obsahovať položku s veľkosťou `1024x1024` a PNG, na ktorý odkazuje, musí existovať.

## Pred ďalším odoslaním

Ikonu opravíš za desať minút, ale každá chyba ťa stojí jeden build. Ostatné automatické kontroly si vyžadujú rovnakú dôslednosť, napríklad [ITMS-90683](https://devoria.fr/sk/blog/itms-90683-missing-purpose-string-expo) pre texty povolení alebo [ITMS-91053](https://devoria.fr/sk/blog/itms-91053-missing-api-declaration-expo) pre privacy manifest. Keď je build prijatý, nainštaluj si ho cez [TestFlight](https://devoria.fr/sk/blog/testflight-otestovat-iphone-aplikaciu) a pozri sa na svoju ikonu na ploche.

Zamietnutia od reviewera si vyžadujú viac nadhľadu: postup nájdeš na stránke [appka zamietnutá od Apple](https://devoria.fr/sk/expertise/aplikacia-zamietnuta-apple) a najčastejšie dôvody v článku [prečo Apple zamieta appky](https://devoria.fr/sk/blog/zamietnutie-aplikacie-apple-pricina).

Na kontrolu podkladov pred odoslaním je tu [Review Kit](https://devoria.fr/sk/kits/app-review), ktorý obsahuje môj checklist a skills pre Claude Code, ktoré prejdú tvoj projekt. Ak sa ti odoslanie zaseklo a chceš ľudský pohľad, [rezervuj si so mnou hodinu](https://devoria.fr/sk/coaching): prejdeme tvoj projekt cez videohovor, na tvojej obrazovke. A ak chystáš svoje prvé vydanie, [sprav si bezplatnú diagnostiku](https://devoria.fr/sk/diagnostic): zoradí ti kroky do správneho poradia a pošle ti môj checklist proti zamietnutiu od Apple.

## Často kladené otázky

### Prečo Apple vidí alfa kanál, keď moja ikona nemá žiadnu priehľadnosť?

Pretože PNG si môže ponechať alfa kanál, aj keď sú všetky jeho pixely nepriehľadné. Veľa nástrojov ho pri exporte pridáva predvolene. Over to cez `sips -g hasAlpha` a potom ikonu exportuj znova bez tohto kanála.

### Dá sa ITMS-90717 opraviť vzdialenou aktualizáciou?

Nie. Ikona je skompilovaná v binárke, v `Assets.car`. Vzdialená aktualizácia mení len JavaScript a zdroje appky. Oprav ikonu, sprav nový build a pošli ho znova.

### Môže byť tmavá ikona priehľadná?

Áno. Apple pre tmavý variant vyžaduje priehľadné pozadie a Expo jeho priehľadnosť zachováva. Z toho usudzujem, že kontrola sa týka hlavnej ikony, tej pre App Store: tá musí byť nepriehľadná.

### Treba iOS ikone zaobliť rohy?

Nie. Dodaj plný štvorec: masku si iOS aplikuje sám. Zaoblené rohy nechajú v rohoch priehľadné pixely, presne to, čo táto kontrola odmieta.

### Podporuje Expo ikony z Icon Composer pre iOS 26?

Áno, od SDK 54: deklaruj cestu k priečinku `.icon` v `ios.icon` ako text. Prebuild ho skopíruje bez zmeny a Xcode 26 ho skompiluje. Ak s týmto formátom dostaneš ITMS-90717, skontroluj priehľadné vrstvy a efekt Blur, alebo sa dočasne vráť k PNG.


## Tvoj projekt

[Review Kit](https://devoria.fr/sk/kits/app-review): Môj checklist na App Store review, moje opravené zamietnutia od Apple, checklist pre Google Play a tri skilly pre Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sk/kits/ios): Vytvor si appku pre iPhone a Android s Claude Code: štartovací kód mojich appiek, cesta až do obchodov a všetky kity. 99 €.

[Diagnostika: čo ťa delí od tvojej iPhone appky](https://devoria.fr/sk/diagnostic): 7 otázok, 60 sekúnd: zistíš, čo ti naozaj bráni zverejniť tvoju iPhone appku, dostaneš cestu v 4 krokoch a kit, ktorý ti sedí.
