# ITMS-90717: popravi »Invalid large app icon« v Expo

> ITMS-90717: ikona 1024 x 1024 v tvojem buildu ima prosojnost ali kanal alfa. Izvozi jo neprosojno, preveri s sips in naredi nov build.

Izvirna stran: [ITMS-90717: popravi »Invalid large app icon« v Expo](https://devoria.fr/sl/blog/itms-90717-invalid-large-app-icon-expo)
Avtor: [Mehdi Azizi](https://devoria.fr/sl/mehdi-azizi)
Objava: 2026-11-04
Zadnja revizija vsebine: 2026-11-04


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

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

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

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

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

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

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

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

```bash
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](https://devoria.fr/sl/blog/itms-90683-missing-purpose-string-expo) za besedila dovoljenj ali [ITMS-91053](https://devoria.fr/sl/blog/itms-91053-missing-api-declaration-expo) za manifest zasebnosti. Ko je build sprejet, ga namesti prek [TestFlight](https://devoria.fr/sl/blog/testflight-testiranje-aplikacije-iphone), da vidiš ikono na svojem domačem zaslonu.

Zavrnitve reviewerja zahtevajo več premisleka: postopek je na strani [aplikacija, ki jo je Apple zavrnil](https://devoria.fr/sl/expertise/apple-zavrnil-aplikacijo), najpogostejši razlogi pa so v članku [zakaj Apple zavrne aplikacijo](https://devoria.fr/sl/blog/apple-zavrnil-aplikacijo-razlogi).

Da preveriš svoj projekt pred oddajo, [Review Kit](https://devoria.fr/sl/kits/app-review) 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](https://devoria.fr/sl/coaching): tvoj projekt pregledava na video klicu, na tvojem zaslonu. Če pa pripravljaš svojo prvo objavo, [opravi brezplačno diagnostiko](https://devoria.fr/sl/diagnostic): 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.


## Tvoj projekt

[Review Kit](https://devoria.fr/sl/kits/app-review): Moj kontrolni seznam za pregled v App Store, moje popravljene zavrnitve Applea, seznam za Google Play in trije skilli za Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sl/kits/ios): Ustvari svojo aplikacijo za iPhone in Android s Claude Code: začetna koda mojih aplikacij, pot do trgovin in vsi kompleti. 99 €.

[Diagnoza: kaj te loči od tvoje aplikacije za iPhone](https://devoria.fr/sl/diagnostic): 7 vprašanj, 60 sekund: izveš, kaj te zares ovira pri objavi aplikacije za iPhone, dobiš pot v 4 korakih in komplet, ki ti ustreza.
