ITMS-90725: как исправить «SDK version issue» в Expo
Автор: Mehdi Azizi
Опубликовано , 7 мин
ITMS-90725: приложение собрано со слишком старым iOS SDK. С 28 апреля 2026 Apple требует Xcode 26: перейди на Expo SDK 54+ и пересобери билд.
ITMS-90725 означает, что автоматическая проверка Apple не пропустила твой билд: приложение собрано с iOS SDK старее минимально допустимого. На 15 октября 2026 года Apple указывает, что с 28 апреля 2026 года приложения, отправляемые в App Store Connect, должны собираться в Xcode 26 или новее с iOS SDK 26. В Expo всё решает образ сборки EAS: начиная с Expo SDK 54, образ по умолчанию идёт с Xcode 26.
Мои приложения Solys, TradaZen и Nolera работают на Expo SDK 57, и в eas.json у них не задан образ принудительно: EAS сам выбирает версию Xcode. Ниже расскажу, как проверить твой проект и что делать, если он на более старой версии.
Что значит ошибка ITMS-90725?
Сообщение называется «ITMS-90725: SDK version issue». В нём указан SDK, с которым собрано твоё приложение, затем требуемый минимум и версия Xcode, в которой он есть. Например, на форуме разработчиков Apple одно сообщение 2024 года начиналось так: «This app was built with the iOS 16.2 SDK», а дальше шло требование того времени.
SDK это набор библиотек iOS, с которыми Xcode собирает твоё приложение. У каждой версии Xcode свой SDK: в Xcode 26 входит iOS SDK 26. Собирать со свежим SDK не значит бросать старые iPhone. Минимальная версия iOS, которую поддерживает приложение, задаётся отдельной настройкой: целевой версией развёртывания (deployment target).
Как и другие ошибки ITMS, это не отказ ревьюера. Проверка автоматическая и касается отправленного бинарника.
Какую версию Xcode Apple требует сейчас?
Вот что сказано на странице предстоящих требований Apple и на странице отправки в App Store по состоянию на 15 октября 2026 года:
| Дата | Требование |
|---|---|
| 28 апреля 2026 | Xcode 26, iOS SDK 26 |
| 9 сентября 2026 | Минимальная цель iOS 13 |
| Апрель 2027 | iOS SDK 27, минимальная цель iOS 15 |
ITMS-90725 срабатывает из-за первого правила. Билд, собранный в Xcode 16 с iOS SDK 18, больше не принимается. Второе касается минимальной поддерживаемой версии, а не SDK. Третье объявлено на апрель 2027 года, и на момент проверки точного дня на странице не было. Apple уже предлагает собирать и тестировать в Xcode 27.
Это требование регулярно повышается, и всегда весной. На той же странице Apple видна история нескольких сроков: Xcode 14.1 с 25 апреля 2023 года, Xcode 15 с 29 апреля 2024 года, Xcode 26 с 28 апреля 2026 года. Перед каждой весной перечитывай её, а не полагайся на статьи, включая эту.
Предупреждение или блокировка: как отличить?
До наступления срока ITMS-90725 приходит как предупреждение. В 2024 году, судя по форуму Apple, в письме говорилось, что доставка прошла успешно, и советовалось исправить это к следующей отправке. После срока Apple пишет, что приложения «должны» собираться с требуемым SDK, чтобы их можно было отправить: билд больше не принимается.
| Признак | Предупреждение | Блокировка |
|---|---|---|
| Дата отправки | До срока | После срока |
| Билд принят | Да | Нет |
| Что делать | Исправить к следующему | Новый билд |
Предупреждение ITMS-90725 это обратный отсчёт. Сегодня билд проходит, но следующий, собранный так же, после этой даты отклонят. Исправь всё, пока тебя не поджимает срочное обновление.
Как исправить ITMS-90725 в проекте Expo
С EAS приложение собирается на Mac'ах Expo, как я объясняю в статье опубликовать iOS-приложение без Mac. Версия Xcode зависит от образа сборки. Если ты не указал image в eas.json, EAS использует алиас auto: он выбирает образ по твоей версии Expo SDK.
Вот какой образ соответствует каждому SDK по документации инфраструктуры EAS, обновлённой 8 октября 2026 года:
| Expo SDK | Xcode в образе | ITMS-90725 |
|---|---|---|
| 57 | 26.6 | Нет |
| 56 | 26.4 | Нет |
| 55 | 26.2 | Нет |
| 54 | 26.0 | Нет |
| 53 | 16.4 | Да |
| 52 | 16.2 | Да |
- Посмотри, какой образ использовал твой последний билд. На странице билда в expo.dev раздел логов «Spin up build environment» показывает название образа и версию Xcode.
- Если у тебя SDK 54 или новее, поищи принудительно заданный образ. Достаточно строки
image, указывающей на Xcode 16, напримерmacos-sequoia-15.6-xcode-16.4, чтобы получить ошибку. В документации Expo он описан как образ SDK 54 для тех, кто не хочет Xcode 26: с 28 апреля 2026 года такой выбор ведёт к отказу. Удали эту строку, и EAS вернётся к образу по умолчанию. - Если у тебя SDK 53 или старше, обнови SDK. Это рекомендация Expo из анонса от 27 апреля 2026 года: перейти как минимум на SDK 54.
- Пересобери билд и отправь заново. SDK зашит в бинарник: удалённое обновление ничего не изменит.
Временное решение для старого SDK
В том же анонсе Expo предлагает вариант, если обновиться сразу не получается: принудительно задать образ с Xcode 26 в eas.json, в production-профиле.
{
"build": {
"production": {
"ios": {
"image": "macos-sequoia-15.6-xcode-26.2"
}
}
}
}
Expo предупреждает: не все версии SDK совместимы с Xcode 26, и результат зависит ещё и от твоих библиотек. Считай это отсрочкой, а не исправлением. Если билд падает на компиляции, остаётся только обновить SDK.
Обновляй SDK по одной версии
Руководство по обновлению Expo советует подниматься по одной версии за раз, чтобы на каждом шаге видеть, что сломалось. Чтобы перейти с SDK 53 на SDK 54:
npm install expo@^54.0.0
npx expo install --fix
npx expo-doctor
Если папку ios генерирует Expo, удали её: она пересоздастся при следующем билде. Потом протестируй приложение на своём iPhone, прежде чем переходить к следующей версии.
Одна деталь, прежде чем целиться в последний SDK. Согласно таблице версий Expo, SDK 54 и 55 поддерживают iOS 15.1 и новее, а SDK 56 и 57 только iOS 16.4 и новее. Значит, переход на SDK 56 отсекает iPhone, оставшиеся на iOS 15. Чтобы избавиться от ITMS-90725, хватит SDK 54.
Как проверить SDK билда перед отправкой
Xcode записывает в Info.plist каждого билда использованные SDK и версию Xcode. Скачай IPA со страницы билда на expo.dev и запусти на своём Mac:
unzip -q MyApp.ipa -d ipa
plutil -extract DTSDKName raw ipa/Payload/*.app/Info.plist
plutil -extract DTXcode raw ipa/Payload/*.app/Info.plist
Для билда под App Store первое значение должно начинаться с iphoneos26. Второе кодирует версию Xcode: на билде Nolera, собранном в Xcode 26.2 для симулятора, я получаю 2620. Если видишь iphoneos18 или значение, начинающееся с 16, билд отклонят.
Если собираешь на своём Mac, важен твой Xcode, а не образ EAS. xcodebuild -version покажет активную версию. В CI та же логика: версия Xcode зависит от выбранной машины. В 2024 году на форуме Apple разработчики получали ITMS-90725, потому что их машина в GitHub Actions работала на слишком старой для Xcode 15 macOS.
Когда правильный билд отправлен, протестируй его в TestFlight до отправки на проверку. Новый билд тоже проходит ревью, со сроками, описанными в статье сроки проверки App Store.
Как отправить билд без неприятных сюрпризов
ITMS-90725 предотвращается за минуту: проверяй образ и SDK перед каждым production-билдом. Другие автоматические проверки требуют такой же внимательности, например ITMS-90683 для текстов запроса разрешений. С отказами ревьюера нужно разбираться вдумчивее: порядок действий описан на странице приложение отклонено Apple, а самые частые причины собраны в статье почему Apple отклоняет приложения.
Чтобы проверить проект перед отправкой, в Review Kit есть мой чек-лист и skills для Claude Code, которые просматривают твой проект. Если отправка застряла и нужен взгляд живого человека, забронируй час со мной: разберём твой проект по видеосвязи, прямо на твоём экране. А если готовишь первый релиз, пройди бесплатную диагностику: она расставит шаги по порядку и пришлёт тебе мой чек-лист против отказов Apple.
Частые вопросы
Мешает ли ITMS-90725 опубликовать приложение?
После срока, установленного Apple, да: билд больше не принимается, и нужно собрать новый. До срока это предупреждение: билд проходит, но следующий отклонят, если собрать его так же.
Нужно ли отказываться от старых iPhone, чтобы собирать с iOS SDK 26?
Нет. SDK сборки и минимальная версия iOS это две разные настройки. В Expo этот минимум определяет твоя версия Expo SDK: iOS 15.1 для SDK 54 и 55, iOS 16.4 для SDK 56 и 57.
Можно ли исправить ITMS-90725 удалённым обновлением?
Нет. SDK записывается в бинарник при компиляции. Удалённое обновление меняет только JavaScript и ресурсы. Нужно пересобрать билд в Xcode 26 и отправить его заново.
Как узнать, какую версию Xcode использует EAS?
Открой логи билда на expo.dev, раздел «Spin up build environment». Название образа показывает версию Xcode, например macos-tahoe-26.5-xcode-26.6. Полный список есть в документации инфраструктуры EAS.
Что изменит требование апреля 2027 года?
Согласно странице отправки Apple, нужно будет собирать с iOS SDK 27 и поддерживать минимум iOS 15. Со стороны EAS Expo планирует образ с Xcode 27 для будущего SDK 58: проверь список образов сборки перед компиляцией. Весной перечитай страницу Apple, чтобы узнать точную дату.

