# ITMS-90717: jak naprawić Invalid large app icon w Expo

> ITMS-90717: ikona 1024 x 1024 w twoim buildzie ma przezroczystość lub kanał alfa. Wyeksportuj ją bez alfy, sprawdź przez sips i zrób nowy build.

Oryginalna strona: [ITMS-90717: jak naprawić Invalid large app icon w Expo](https://devoria.fr/pl/blog/itms-90717-invalid-large-app-icon-expo)
Autor: [Mehdi Azizi](https://devoria.fr/pl/mehdi-azizi)
Publikacja: 2026-11-04
Ostatnia aktualizacja treści: 2026-11-04


ITMS-90717 to automatyczna kontrola Apple na twoim buildzie. Mówi, że duża ikona aplikacji, ta 1024 x 1024 piksele wyświetlana w App Store, zawiera przezroczystość albo kanał alfa. **Rozwiązanie: kwadratowa, nieprzezroczysta ikona wyeksportowana bez kanału alfa, a potem nowy build.**

W Expo twój plik PNG rzadko jest winowajcą: prebuild i tak kładzie go na białym tle. Przeczytałem ten kod w SDK 57 i sprawdziłem ikony Solys, TradaZen i Nolera. Błąd bierze się wtedy najczęściej z wersjonowanego folderu `ios` albo z pliku Icon Composer. Oto jak ustalić, z którego, i jak to naprawić.

## Co oznacza błąd ITMS-90717?

Komunikat ma tytuł „ITMS-90717: Invalid large app icon”. Precyzuje, że duża ikona w katalogu zasobów twojej aplikacji „can't be transparent or contain an alpha channel”: nie może być przezroczysta ani mieć kanału alfa. Starsze komunikaty mówiły o „Invalid App Store Icon”. To ta sama reguła.

Ta duża ikona to ikona z App Store. Wyjaśnia to [dokumentacja Xcode o ikonach](https://developer.apple.com/documentation/xcode/configuring-your-app-icon): aplikacja dystrybuowana w App Store musi mieć w katalogu zasobów ikonę 1024 punktów.

Kanał alfa to czwarta warstwa PNG, obok czerwonego, zielonego i niebieskiego. Przechowuje przezroczystość każdego piksela. **Ikona może wyglądać na pełną i nadal mieć ten kanał**: to pułapka, która wraca w każdym wątku na forach.

Jak inne błędy ITMS, to nie jest odrzucenie przez recenzenta. Apple przeanalizowało plik binarny przy wysyłce. Zależnie od narzędzia błąd pojawia się jako nieudana walidacja, na przykład z kodem 409.

## Sprawdź ikonę przez sips

Na Macu `sips` jest zainstalowany domyślnie. Wystarczy jedna linia:

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

Chcesz zobaczyć `hasAlpha: no`. 15 października 2026 uruchomiłem tę komendę na ikonach zadeklarowanych w app.json Solys, TradaZen i Nolera: wszystkie odpowiadają `no`, w rozmiarze 1024 x 1024.

Zrobiłem też ikonę testową: niebieski kwadrat, całkowicie nieprzezroczysty, ale zapisany z kanałem alfa. `sips` odpowiada `yes`. **Żaden piksel nie jest przezroczysty, a kanał i tak jest.** Dlatego tylu deweloperów pisze pod tym komunikatem „moja ikona nie ma żadnej przezroczystości”.

W Podglądzie (Preview) inspektor (Tools, Show Inspector) też pokazuje właściwości obrazu, w tym kanał alfa.

## Naprawa: eksport ikony bez kanału alfa

Trzy metody, od najprostszej do najdokładniejszej.

**1. Podgląd (Preview).** File, Export, format PNG, potem odznacz pole Alpha. Wyeksportowany plik nie ma już kanału alfa.

**2. sips, bez instalowania czegokolwiek.** `sips` nie usuwa kanału alfa z PNG. Trzeba przejść przez JPEG, który go nie ma:

```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 ikonie testowej z przezroczystymi rogami rogi zrobiły się białe, a ostatnia linia odpowiada `no`. Przejście przez JPEG trochę kompresuje obraz, nawet przy maksymalnej jakości: przyjrzyj się wynikowi z bliska.

**3. ImageMagick.** Jeśli go masz, wybierasz kolor tła:

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

Według [dokumentacji ImageMagick](https://imagemagick.org/command-line-options/#alpha) `-alpha remove` kładzie obraz na kolorze tła, a `-alpha off` wyłącza kanał.

Te trzy metody wypełniają przezroczystość jednolitym kolorem. Jeśli twoje logo wisiało na przezroczystym tle, najczyściej jest wrócić do pliku źródłowego i narysować prawdziwe tło. Expo wymaga tego w swoim [przewodniku po ikonie aplikacji](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): ikona musi wypełniać cały kwadrat, bez zaokrąglonych rogów i przezroczystych pikseli. iOS sam nakłada maskę.

## Skąd Expo bierze ikonę i co z nią robi

Expo czyta najpierw `ios.icon`, potem pole `icon` w głównej części konfiguracji. Według [dokumentacji konfiguracji Expo](https://docs.expo.dev/versions/latest/config/app/) `ios.icon` przyjmuje trzy formy: PNG, obiekt z wariantami `light`, `dark` i `tinted` albo folder `.icon` utworzony w Icon Composer.

Poniższa tabela pochodzi z kodu, który generuje ikonę iOS przy prebuildzie, `@expo/prebuild-config` 57.0.16 (SDK 57), czytanego 15 października 2026:

| Co deklarujesz            | Co robi prebuild           | Ryzyko ITMS-90717      |
| ------------------------- | -------------------------- | ---------------------- |
| `icon` jako PNG           | Spłaszcza na białym tle    | Niskie                 |
| `ios.icon.light`          | Spłaszcza na białym tle    | Niskie                 |
| `ios.icon.tinted`         | Spłaszcza na białym tle    | Niskie                 |
| `ios.icon.dark`           | Zachowuje przezroczystość  | Zamierzone przez Apple |
| `ios.icon` jako `.icon`   | Kopiuje bez zmian          | Realne                 |
| Wersjonowany folder `ios` | Prebuild się nie uruchamia | Realne                 |

**Z PNG Expo samo usuwa przezroczystość i zastępuje ją bielą.** Wycięte logo ląduje więc na białym kwadracie: błędu nie ma, ale efekt może nie być tym, czego chciałeś. Wariant ciemny zachowuje przezroczystość i to celowe: Apple wymaga przezroczystego tła dla ciemnej ikony, żeby było widać tło dostarczane przez system.

W Nolerze, która deklaruje trzy warianty, `sips` odpowiada `no` dla wygenerowanej ikony jasnej i tinted, `yes` dla ciemnej. Sądząc po dacie commita z tymi wariantami, opublikowana wersja 1.0.2 je zawiera. Nie sprawdziłem tego w jej IPA.

### Przypadek wersjonowanego folderu ios

To najbardziej prawdopodobna przyczyna w Expo. [Strona Expo o continuous native generation](https://docs.expo.dev/workflow/continuous-native-generation/) mówi wprost: jeśli projekt zawiera foldery `android` i `ios`, EAS Build nie uruchamia prebuilda. **Twój app.json przestaje wtedy wpływać na ikonę**: do Apple trafia PNG z folderu `ios`.

Sprawdź to z katalogu głównego projektu:

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

Jeśli komenda odpowiada `yes` dla ikony 1024, zastąp ten plik nieprzezroczystą wersją, pod tą samą nazwą. Jeśli nie robiłeś ręcznie żadnych zmian natywnych, możesz też usunąć folder `ios` i dodać go do `.gitignore`: EAS wygeneruje go przy każdym buildzie. W Solys, TradaZen i Nolerze ten folder jest ignorowany przez git.

## Format iOS 26: Icon Composer

Icon Composer to narzędzie Apple do ikon Liquid Glass w iOS 26. Tworzy jeden plik `.icon` z wieloma warstwami. Według [przewodnika Apple po Icon Composer](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer) Xcode generuje z niego też obrazy dla starszych wersji iOS.

Expo obsługuje go od SDK 54. Folder deklarujesz jako tekst, nigdy w obiekcie wariantów:

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

W tym przypadku prebuild kopiuje folder bez zmian, a ostateczną ikonę tworzy Xcode. Potrzebujesz więc Xcode 26 lub nowszego, tego z nowszych obrazów EAS, jak tłumaczę w poradniku o [ITMS-90725](https://devoria.fr/pl/blog/itms-90725-sdk-version-issue-expo).

Od sierpnia 2025 na forum deweloperów Apple pojawiają się wątki o ITMS-90717 z plikami `.icon`. Zgłaszane tropy: przezroczysta warstwa PNG, warstwa większa niż płótno, grupa z efektem Blur blisko krawędzi. Wymieniane obejścia: wyłączyć Blur, zostawić pełne tło albo wrócić do PNG. Te wątki nie podają żadnej oficjalnej poprawki od Apple, a błąd był zgłaszany jeszcze w sierpniu 2026.

[Zasady Apple dotyczące ikon](https://developer.apple.com/design/human-interface-guidelines/app-icons) idą w tym kierunku: jeśli importujesz warstwę tła, musi pokrywać całą powierzchnię i być nieprzezroczysta. Moje aplikacje wciąż używają PNG, więc nie testowałem Icon Composer na produkcji. **Jeśli plik `.icon` blokuje wysyłkę, przełącz `ios.icon` z powrotem na PNG**: Expo go spłaszczy, a ikona przejdzie tę kontrolę.

## Sprawdź ikonę w finalnym buildzie

W IPA ikona 1024 nie jest plikiem PNG: Xcode kompiluje ją do `Assets.car`. Pobierz IPA ze strony buildu na expo.dev, a potem uruchom:

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

Każda ikona pokazuje pole `Opaque`. 15 października 2026 skompilowałem przez `actool`, narzędzie Xcode, ikonę Solys i moją ikonę testową z przezroczystymi rogami. Pierwsza wychodzi jako `"Opaque" : true`, druga jako `"Opaque" : false`. Apple nie dokumentuje tego pola: traktuj je jako wskazówkę, nie jako kontrolę Apple.

Pułapka, o której warto wiedzieć: **nie testuj przez `sips` małych plików PNG w katalogu głównym aplikacji.** Xcode zapisuje je z kanałem alfa, nawet gdy źródło jest nieprzezroczyste. W moim teście z ikoną Solys `sips` odpowiada dla nich `yes`.

## Inne błędy ikon

| Kod        | Co zgłasza Apple         | Trop w Expo      |
| ---------- | ------------------------ | ---------------- |
| ITMS-90717 | Przezroczysta ikona 1024 | Eksport bez alfy |
| ITMS-90704 | Brak ikony 1024          | Brak wpisu 1024  |
| ITMS-90022 | Brak ikony iPhone        | Niepełny katalog |
| ITMS-90023 | Brak ikony iPad          | Niepełny katalog |

Trzy ostatnie komunikaty pochodzą głównie z lat 2017 i 2018, kiedy Xcode 9 zmienił zasady dotyczące ikon.

W Expo stały się rzadkie. Prebuild zapisuje jedną uniwersalną ikonę 1024, a Xcode generuje pozostałe rozmiary. Bez zadeklarowanej ikony Expo tworzy nawet biały kwadrat, żeby uniknąć błędu przy wysyłce. **Jeśli trafi cię któryś z tych błędów, zajrzyj do wersjonowanego folderu `ios`**: plik `Contents.json` w `AppIcon.appiconset` musi zawierać wpis o rozmiarze `1024x1024`, a wskazany w nim PNG musi istnieć.

## Przed następną wysyłką

Ikonę poprawisz w dziesięć minut, ale każdy błąd kosztuje build. Inne automatyczne kontrole wymagają tej samej staranności, na przykład [ITMS-90683](https://devoria.fr/pl/blog/itms-90683-missing-purpose-string-expo) dla opisów uprawnień czy [ITMS-91053](https://devoria.fr/pl/blog/itms-91053-missing-api-declaration-expo) dla manifestu prywatności. Gdy build zostanie przyjęty, zainstaluj go przez [TestFlight](https://devoria.fr/pl/blog/testflight-testowanie-aplikacji-iphone), żeby zobaczyć ikonę na ekranie głównym.

Odrzucenia przez recenzenta wymagają więcej dystansu: sposób postępowania jest na stronie [aplikacja odrzucona przez Apple](https://devoria.fr/pl/expertise/aplikacja-odrzucona-przez-apple), a najczęstsze powody w artykule [dlaczego Apple odrzuca aplikację](https://devoria.fr/pl/blog/odrzucenie-aplikacji-apple-prawdziwe-przypadki).

Żeby sprawdzić swoje zgłoszenie przed wysyłką, [Review Kit](https://devoria.fr/pl/kits/app-review) zbiera moją checklistę i skille Claude Code, które przeglądają twój projekt. Jeśli wysyłka stoi i chcesz, żeby spojrzał na to człowiek, [zarezerwuj ze mną godzinę](https://devoria.fr/pl/coaching): przejdziemy przez twój projekt na wideorozmowie, na twoim ekranie. A jeśli szykujesz pierwsze wydanie, [zrób darmową diagnozę](https://devoria.fr/pl/diagnostic): ułoży kroki we właściwej kolejności i wyśle ci moją checklistę przeciw odrzuceniom przez Apple.

## Najczęściej zadawane pytania

### Dlaczego Apple widzi kanał alfa, skoro moja ikona nie ma żadnej przezroczystości?

Bo PNG może mieć kanał alfa, nawet gdy wszystkie piksele są nieprzezroczyste. Wiele narzędzi dodaje go domyślnie przy eksporcie. Sprawdź przez `sips -g hasAlpha`, a potem wyeksportuj ikonę ponownie bez tego kanału.

### Czy można naprawić ITMS-90717 aktualizacją zdalną?

Nie. Ikona jest skompilowana w pliku binarnym, w `Assets.car`. Aktualizacja zdalna zmienia tylko JavaScript i zasoby aplikacji. Popraw ikonę, zrób nowy build i wyślij go ponownie.

### Czy ciemna ikona może być przezroczysta?

Tak. Apple wymaga przezroczystego tła dla wariantu ciemnego, a Expo zachowuje jego przezroczystość. Wnioskuję z tego, że kontrola dotyczy głównej ikony, tej z App Store: to ona musi być nieprzezroczysta.

### Czy trzeba zaokrąglać rogi ikony iOS?

Nie. Dostarcz pełny kwadrat: iOS sam nakłada maskę. Zaokrąglone rogi zostawiają przezroczyste piksele w narożnikach, czyli dokładnie to, czego ta kontrola nie akceptuje.

### Czy Expo obsługuje ikony Icon Composer z iOS 26?

Tak, od SDK 54: zadeklaruj ścieżkę do folderu `.icon` w `ios.icon`, jako tekst. Prebuild kopiuje go bez zmian, a Xcode 26 go kompiluje. Jeśli przy tym formacie pojawi się ITMS-90717, sprawdź przezroczyste warstwy i efekt Blur albo tymczasowo wróć do PNG.


## Twój projekt

[Review Kit](https://devoria.fr/pl/kits/app-review): Moja checklista do App Store Review, poprawione odrzucenia od Apple, checklista do Google Play i trzy skille Claude Code. 219 zł.

[iOS & Android Kit](https://devoria.fr/pl/kits/ios): Stwórz swoją aplikację na iPhone'a i Androida z Claude Code: kod startowy moich aplikacji, droga aż do sklepów i wszystkie kity. 439 zł.

[Diagnoza: co dzieli cię od twojej aplikacji na iPhone'a](https://devoria.fr/pl/diagnostic): 7 pytań, 60 sekund: wiesz, co naprawdę blokuje publikację twojej aplikacji na iPhone'a, masz plan w 4 krokach i kit dopasowany do ciebie.
