# ITMS-90717: як виправити «Invalid large app icon» в Expo

> ITMS-90717: іконка 1024 x 1024 у твоєму білді має прозорість або альфа-канал. Експортуй її непрозорою, перевір через sips і зроби новий білд.

Оригінальна сторінка: [ITMS-90717: як виправити «Invalid large app icon» в Expo](https://devoria.fr/uk/blog/itms-90717-invalid-large-app-icon-expo)
Автор: [Mehdi Azizi](https://devoria.fr/uk/mehdi-azizi)
Опубліковано: 2026-11-04
Останнє оновлення змісту: 2026-11-04


ITMS-90717 означає, що автоматична перевірка Apple знайшла проблему у твоєму білді. Велика іконка застосунку, та сама 1024 x 1024 пікселі, яку показує App Store, містить прозорість або альфа-канал. **Як виправити: зроби квадратну непрозору іконку, експортуй її без альфа-каналу і збери новий білд.**

В Expo сам PNG-файл рідко буває винним: prebuild і так кладе його на білий фон. Я прочитав цей код у SDK 57 і перевірив іконки Solys, TradaZen і Nolera. Тож помилка найчастіше йде від папки `ios` під контролем версій або від файлу Icon Composer. Ось як знайти, звідки саме, і виправити.

## Що означає помилка ITMS-90717?

Повідомлення має заголовок «ITMS-90717: Invalid large app icon». У ньому сказано, що велика іконка в каталозі зображень твого застосунку «can't be transparent or contain an alpha channel», тобто не може бути прозорою чи містити альфа-канал. У старих повідомленнях писали «Invalid App Store Icon». Правило те саме.

Ця велика іконка і є іконкою для App Store. Про це пише [документація Xcode про іконки](https://developer.apple.com/documentation/xcode/configuring-your-app-icon): застосунок, який поширюється через App Store, мусить мати у своєму каталозі зображень іконку на 1024 точки.

Альфа-канал: це четвертий шар PNG поруч із червоним, зеленим і синім. Він зберігає прозорість кожного пікселя. **Іконка може виглядати суцільною і все одно мати цей канал.** Саме на цьому спотикаються в кожній гілці на форумах.

Як і інші помилки ITMS, це не відмова від рев'юера. Apple проаналізувала бінарник одразу під час завантаження. Залежно від інструменту завантаження помилка виглядає як збій валідації, наприклад із кодом 409.

## Перевір іконку через sips

На Mac `sips` встановлено за замовчуванням. Достатньо одного рядка:

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

Тобі потрібна відповідь `hasAlpha: no`. 15 жовтня 2026 року я запустив цю команду на іконках, зазначених в app.json Solys, TradaZen і Nolera: усі відповіли `no`, розмір 1024 x 1024.

Ще я зробив тестову іконку: синій квадрат, повністю непрозорий, але збережений з альфа-каналом. `sips` відповідає `yes`. **Жодного прозорого пікселя, а канал все одно є.** Тому під цим повідомленням стільки розробників пишуть «у моїй іконці немає жодної прозорості».

У Preview інспектор (Tools, Show Inspector) теж показує властивості зображення, зокрема альфа-канал.

## Виправлення: експортуй іконку без альфа-каналу

Три способи, від найпростішого до найточнішого.

**1. Preview.** File, Export, формат PNG, потім зніми галочку Alpha. В експортованому файлі альфа-каналу вже немає.

**2. sips, нічого не встановлюючи.** `sips` не прибирає альфа-канал із PNG. Доведеться пройти через JPEG, у якого його немає:

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

На моїй тестовій іконці з прозорими кутами кути стали білими, а останній рядок відповів `no`. Конвертація в JPEG трохи стискає зображення навіть на максимальній якості, тож роздивися результат уважно.

**3. ImageMagick.** Якщо він у тебе встановлений, можеш вибрати колір фону:

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

За [документацією ImageMagick](https://imagemagick.org/command-line-options/#alpha), `-alpha remove` кладе зображення на колір фону, а `-alpha off` вимикає канал.

Усі три способи заповнюють прозорість суцільним кольором. Якщо твій логотип висів на прозорому фоні, найчистіше рішення: відкрити вихідний файл і намалювати справжній фон. Expo вимагає цього у своєму [гайді з іконки застосунку](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): іконка має заповнювати весь квадрат, без заокруглених кутів і прозорих пікселів. Маску iOS накладає сама.

## Звідки Expo бере іконку і що з нею робить

Expo спершу читає `ios.icon`, потім поле `icon` у корені конфігурації. За [довідником конфігурації Expo](https://docs.expo.dev/versions/latest/config/app/), `ios.icon` приймає три форми: PNG, об'єкт із варіантами `light`, `dark` і `tinted` або папку `.icon`, створену в Icon Composer.

Таблиця нижче складена за кодом, що генерує іконку iOS під час prebuild, `@expo/prebuild-config` 57.0.16 (SDK 57), прочитаним 15 жовтня 2026 року:

| Що ти вказуєш        | Що робить prebuild       | Ризик ITMS-90717   |
| -------------------- | ------------------------ | ------------------ |
| `icon` у PNG         | Накладає на білий фон    | Низький            |
| `ios.icon.light`     | Накладає на білий фон    | Низький            |
| `ios.icon.tinted`    | Накладає на білий фон    | Низький            |
| `ios.icon.dark`      | Зберігає прозорість      | Так задумала Apple |
| `ios.icon` у `.icon` | Копіює як є              | Реальний           |
| Папка `ios` у git    | Prebuild не запускається | Реальний           |

**Якщо це PNG, Expo сам прибирає прозорість і замінює її білим.** Тож логотип без фону опиниться на білому квадраті: помилки не буде, але вигляд може вийти не той, який ти хотів. Темний варіант зберігає прозорість, і це навмисно: для темної іконки Apple вимагає прозорий фон, щоб було видно фон від системи.

На Nolera, де вказані всі три варіанти, `sips` відповідає `no` для згенерованих світлої і тонованої іконок і `yes` для темної. Якщо судити з дати коміту цих варіантів, вони є у версії 1.0.2, яка зараз у сторі. В її IPA я цього не перевіряв.

### Випадок із папкою ios під контролем версій

З Expo це найімовірніша причина. [Сторінка Expo про continuous native generation](https://docs.expo.dev/workflow/continuous-native-generation/) пише прямо: якщо в проєкті є папки `android` і `ios`, EAS Build не запускає prebuild. **Тоді твій app.json на іконку вже не впливає**: до Apple іде PNG із папки `ios`.

Перевір це з кореня проєкту:

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

Якщо команда відповідає `yes` для іконки 1024, заміни цей файл непрозорою версією з тією ж назвою. Якщо ти нічого не міняв у нативному коді вручну, можна також видалити папку `ios` і додати її в `.gitignore`: EAS згенерує її заново при кожному білді. У Solys, TradaZen і Nolera ця папка ігнорується git.

## Формат iOS 26: Icon Composer

Icon Composer: це інструмент Apple для іконок Liquid Glass в iOS 26. Він створює один файл `.icon` з кількома шарами. За [гайдом Apple про Icon Composer](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer), Xcode генерує з нього й зображення для старіших версій iOS.

Expo підтримує його з SDK 54. Папку вказуєш рядком, ніколи не в об'єкті з варіантами:

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

У цьому разі prebuild копіює папку, нічого в ній не змінюючи, а фінальну іконку збирає Xcode. Тому потрібен Xcode 26 або новіший, той, що в свіжих образах EAS, як я пояснюю в гайді про [ITMS-90725](https://devoria.fr/uk/blog/itms-90725-sdk-version-issue-expo).

З серпня 2025 року на форумі розробників Apple з'являються гілки про ITMS-90717 з файлами `.icon`. Які причини називають: прозорий PNG-шар, шар більший за полотно, група з ефектом Blur біля краю. Які обхідні шляхи згадують: вимкнути Blur, залишити суцільний фон або повернутися до PNG. Офіційного виправлення від Apple у цих гілках немає, а в серпні 2026 року про помилку ще повідомляли.

[Правила Apple щодо іконок](https://developer.apple.com/design/human-interface-guidelines/app-icons) кажуть те саме: якщо імпортуєш фоновий шар, він має покривати всю площу і бути непрозорим. Мої застосунки досі використовують PNG, тож Icon Composer у продакшені я не тестував. **Якщо файл `.icon` блокує завантаження, перемкни `ios.icon` назад на PNG**: Expo його сплющить, і іконка пройде цю перевірку.

## Перевір іконку у фінальному білді

В IPA іконка 1024 не лежить окремим PNG: Xcode компілює її в `Assets.car`. Завантаж IPA зі сторінки білда на expo.dev і запусти:

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

У кожної іконки є поле `Opaque`. 15 жовтня 2026 року я скомпілював через `actool`, інструмент Xcode, іконку Solys і свою тестову іконку з прозорими кутами. Перша вийшла з `"Opaque" : true`, друга з `"Opaque" : false`. Apple це поле не документує, тож сприймай його як підказку, а не як ту саму перевірку, що робить Apple.

Пастка, про яку варто знати: **не перевіряй через `sips` маленькі PNG у корені застосунку.** Xcode записує їх з альфа-каналом, навіть коли джерело непрозоре. У моєму тесті з іконкою Solys `sips` відповідає для них `yes`.

## Інші помилки іконок

| Код        | Що повідомляє Apple     | Що перевірити в Expo |
| ---------- | ----------------------- | -------------------- |
| ITMS-90717 | Іконка 1024 прозора     | Експорт без альфи    |
| ITMS-90704 | Немає іконки 1024       | Бракує запису 1024   |
| ITMS-90022 | Немає іконки для iPhone | Неповний каталог     |
| ITMS-90023 | Немає іконки для iPad   | Неповний каталог     |

Останні три повідомлення здебільшого з 2017 і 2018 років, коли Xcode 9 змінив правила для іконок.

З Expo вони стали рідкістю. Prebuild записує одну універсальну іконку 1024, а решту розмірів генерує Xcode. Якщо іконку не вказано, Expo навіть створює білий квадрат, щоб завантаження не впало. **Якщо вилізла одна з цих помилок, глянь на папку `ios` під контролем версій**: файл `Contents.json` в `AppIcon.appiconset` має містити запис розміру `1024x1024`, а PNG, на який він посилається, має існувати.

## Перед наступним завантаженням

Іконка виправляється за десять хвилин, але кожна помилка коштує тобі білда. Інші автоматичні перевірки вимагають такої ж уважності, як-от [ITMS-90683](https://devoria.fr/uk/blog/itms-90683-missing-purpose-string-expo) для текстів запитів дозволів чи [ITMS-91053](https://devoria.fr/uk/blog/itms-91053-missing-api-declaration-expo) для маніфесту конфіденційності. Коли білд приймуть, встанови його через [TestFlight](https://devoria.fr/uk/blog/testflight-testuvannya-zastosunku-iphone), щоб побачити іконку на своєму головному екрані.

Відмови від рев'юера потребують більше роздумів: що робити, описано на сторінці [застосунок відхилила Apple](https://devoria.fr/uk/expertise/app-rejected-by-apple), а найчастіші причини зібрано в статті [чому Apple відхиляє застосунок](https://devoria.fr/uk/blog/vidmova-apple-app-store-prychyny).

Щоб перевірити все перед завантаженням, у [Review Kit](https://devoria.fr/uk/kits/app-review) є мій чекліст і skills для Claude Code, які переглядають твій проєкт. Якщо завантаження застрягло і потрібен погляд живої людини, [забронюй годину зі мною](https://devoria.fr/uk/coaching): розберемо твій проєкт по відеозв'язку, на твоєму екрані. А якщо готуєш свій перший реліз, [пройди безкоштовну діагностику](https://devoria.fr/uk/diagnostic): вона розставить кроки по порядку і надішле тобі мій чекліст проти відмов Apple.

## Поширені запитання

### Чому Apple бачить альфа-канал, хоча в моїй іконці немає жодної прозорості?

Бо PNG може зберігати альфа-канал, навіть коли всі його пікселі непрозорі. Багато інструментів додають його під час експорту за замовчуванням. Перевір через `sips -g hasAlpha`, а потім знову експортуй іконку без цього каналу.

### Чи можна виправити ITMS-90717 віддаленим оновленням?

Ні. Іконка скомпільована в бінарник, в `Assets.car`. Віддалене оновлення змінює лише JavaScript і ресурси застосунку. Виправ іконку, збери новий білд і завантаж його знову.

### Чи може темна іконка бути прозорою?

Так. Для темного варіанту Apple вимагає прозорий фон, і Expo зберігає його прозорість. Звідси я роблю висновок, що перевірка стосується основної іконки, тієї, що для App Store: саме вона має бути непрозорою.

### Чи треба заокруглювати кути іконки iOS?

Ні. Дай суцільний квадрат: маску iOS накладає сама. Заокруглені кути залишають прозорі пікселі по краях, а саме це й не пропускає ця перевірка.

### Чи підтримує Expo іконки Icon Composer з iOS 26?

Так, з SDK 54: вкажи шлях до папки `.icon` в `ios.icon` рядком. Prebuild копіює її як є, а Xcode 26 компілює. Якщо з цим форматом вилізла ITMS-90717, перевір прозорі шари та ефект Blur або тимчасово повернись до PNG.


## Твій проєкт

[Review Kit](https://devoria.fr/uk/kits/app-review): Мій чекліст для перевірки в App Store, виправлені відмови Apple, чекліст для Google Play і три скіли для Claude Code. 2 499 ₴.

[iOS & Android Kit](https://devoria.fr/uk/kits/ios): Створи свій застосунок для iPhone і Android з Claude Code: стартовий код моїх застосунків, шлях до публікації в сторах і всі кіти. 4 999 ₴.

[Діагностика: що відділяє тебе від твого застосунку для iPhone](https://devoria.fr/uk/diagnostic): 7 запитань, 60 секунд: ти дізнаєшся, що насправді заважає тобі опублікувати застосунок для iPhone, отримаєш свій шлях у 4 кроки і кіт, який тобі підходить.
