# ITMS-90717: как исправить Invalid large app icon в Expo

> ITMS-90717: в иконке 1024 x 1024 твоего билда осталась прозрачность или альфа-канал. Экспортируй её непрозрачной, проверь через sips и пересобери билд.

Оригинальная страница: [ITMS-90717: как исправить Invalid large app icon в Expo](https://devoria.fr/ru/blog/itms-90717-invalid-large-app-icon-expo)
Автор: [Mehdi Azizi](https://devoria.fr/ru/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`, которая лежит в git, или из файла 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 в git

С 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/ru/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` в git**: файл `Contents.json` в `AppIcon.appiconset` должен содержать запись размера `1024x1024`, а указанный в ней PNG должен существовать.

## Перед следующей отправкой

Иконка исправляется за десять минут, но каждая ошибка стоит тебе билда. Другие автоматические проверки требуют такой же аккуратности, например [ITMS-90683](https://devoria.fr/ru/blog/itms-90683-missing-purpose-string-expo) для текстов запроса разрешений или [ITMS-91053](https://devoria.fr/ru/blog/itms-91053-missing-api-declaration-expo) для манифеста приватности. Когда билд примут, установи его через [TestFlight](https://devoria.fr/ru/blog/testflight-testirovanie-iphone-prilozheniya) и посмотри на иконку на своём домашнем экране.

С отказами ревьюера нужно разбираться вдумчивее: порядок действий описан на странице [приложение отклонено Apple](https://devoria.fr/ru/expertise/app-rejected-by-apple), а самые частые причины собраны в статье [почему Apple отклоняет приложение](https://devoria.fr/ru/blog/otkaz-apple-app-store-prichiny).

Чтобы проверить всё перед отправкой, в [Review Kit](https://devoria.fr/ru/kits/app-review) собраны мой чек-лист и skills для Claude Code, которые проверяют твой проект. Если отправка застряла и нужен живой взгляд, [забронируй час со мной](https://devoria.fr/ru/coaching): разберём твой проект по видеосвязи, прямо на твоём экране. А если готовишь свой первый релиз, [пройди бесплатную диагностику](https://devoria.fr/ru/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/ru/kits/app-review): Мой чек-лист для ревью в App Store, исправленные отказы Apple, чек-лист для Google Play и три скилла для Claude Code. 55 $.

[iOS & Android Kit](https://devoria.fr/ru/kits/ios): Создай своё приложение для iPhone и Android с Claude Code: стартовый код моих приложений, путь до публикации в сторах и все киты. 109 $.

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