ITMS-90717: як виправити «Invalid large app icon» в Expo
Автор: Mehdi Azizi
Опубліковано , 8 хв
ITMS-90717: іконка 1024 x 1024 у твоєму білді має прозорість або альфа-канал. Експортуй її непрозорою, перевір через sips і зроби новий білд.
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 про іконки: застосунок, який поширюється через App Store, мусить мати у своєму каталозі зображень іконку на 1024 точки.
Альфа-канал: це четвертий шар PNG поруч із червоним, зеленим і синім. Він зберігає прозорість кожного пікселя. Іконка може виглядати суцільною і все одно мати цей канал. Саме на цьому спотикаються в кожній гілці на форумах.
Як і інші помилки ITMS, це не відмова від рев'юера. Apple проаналізувала бінарник одразу під час завантаження. Залежно від інструменту завантаження помилка виглядає як збій валідації, наприклад із кодом 409.
Перевір іконку через sips
На Mac sips встановлено за замовчуванням. Достатньо одного рядка:
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, у якого його немає:
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. Якщо він у тебе встановлений, можеш вибрати колір фону:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
За документацією ImageMagick, -alpha remove кладе зображення на колір фону, а -alpha off вимикає канал.
Усі три способи заповнюють прозорість суцільним кольором. Якщо твій логотип висів на прозорому фоні, найчистіше рішення: відкрити вихідний файл і намалювати справжній фон. Expo вимагає цього у своєму гайді з іконки застосунку: іконка має заповнювати весь квадрат, без заокруглених кутів і прозорих пікселів. Маску iOS накладає сама.
Звідки Expo бере іконку і що з нею робить
Expo спершу читає ios.icon, потім поле icon у корені конфігурації. За довідником конфігурації Expo, 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 пише прямо: якщо в проєкті є папки android і ios, EAS Build не запускає prebuild. Тоді твій app.json на іконку вже не впливає: до Apple іде PNG із папки ios.
Перевір це з кореня проєкту:
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, Xcode генерує з нього й зображення для старіших версій iOS.
Expo підтримує його з SDK 54. Папку вказуєш рядком, ніколи не в об'єкті з варіантами:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
У цьому разі prebuild копіює папку, нічого в ній не змінюючи, а фінальну іконку збирає Xcode. Тому потрібен Xcode 26 або новіший, той, що в свіжих образах EAS, як я пояснюю в гайді про ITMS-90725.
З серпня 2025 року на форумі розробників Apple з'являються гілки про ITMS-90717 з файлами .icon. Які причини називають: прозорий PNG-шар, шар більший за полотно, група з ефектом Blur біля краю. Які обхідні шляхи згадують: вимкнути Blur, залишити суцільний фон або повернутися до PNG. Офіційного виправлення від Apple у цих гілках немає, а в серпні 2026 року про помилку ще повідомляли.
Правила Apple щодо іконок кажуть те саме: якщо імпортуєш фоновий шар, він має покривати всю площу і бути непрозорим. Мої застосунки досі використовують PNG, тож Icon Composer у продакшені я не тестував. Якщо файл .icon блокує завантаження, перемкни ios.icon назад на PNG: Expo його сплющить, і іконка пройде цю перевірку.
Перевір іконку у фінальному білді
В IPA іконка 1024 не лежить окремим PNG: Xcode компілює її в Assets.car. Завантаж IPA зі сторінки білда на expo.dev і запусти:
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 для текстів запитів дозволів чи ITMS-91053 для маніфесту конфіденційності. Коли білд приймуть, встанови його через TestFlight, щоб побачити іконку на своєму головному екрані.
Відмови від рев'юера потребують більше роздумів: що робити, описано на сторінці застосунок відхилила Apple, а найчастіші причини зібрано в статті чому Apple відхиляє застосунок.
Щоб перевірити все перед завантаженням, у Review Kit є мій чекліст і skills для Claude Code, які переглядають твій проєкт. Якщо завантаження застрягло і потрібен погляд живої людини, забронюй годину зі мною: розберемо твій проєкт по відеозв'язку, на твоєму екрані. А якщо готуєш свій перший реліз, пройди безкоштовну діагностику: вона розставить кроки по порядку і надішле тобі мій чекліст проти відмов 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.

