Опубликовать iOS-приложение без Mac: Expo и EAS
Автор: Mehdi Azizi
Обновлено , 9 мин
С ПК на Windows Expo и EAS собирают iOS-приложение и отправляют его в Apple. Что работает без Mac, где сложности и зачем всё же нужен iPhone.
Можно ли опубликовать iOS-приложение без Mac?
Да. Ты можешь опубликовать iOS-приложение без Mac, если делаешь его на Expo и React Native. EAS Build собирает приложение на Mac-машинах Expo в облаке, а EAS Submit потом отправляет его в App Store Connect. В документации Expo это сказано прямо: EAS Submit работает на macOS, Linux и Windows, так что Mac для отправки iOS-сборки не нужен.
Зато тебе понадобятся три вещи, которые ничем не заменить: платный аккаунт Apple Developer, iPhone, чтобы протестировать приложение по-настоящему, и браузер, чтобы заполнить страницу в App Store Connect. Дальше в гайде: что работает с ПК на Windows, где возникают сложности и в каком порядке всё делать.
Все мои iOS-приложения проходят через одну цепочку: Expo, EAS Build, потом EAS Submit. Так в App Store попали Solys и TradaZen. Я работаю на Mac, но ни один шаг публикации от него не зависит: сборки делаются в облаке Expo, а отправка в Apple идёт через командную строку.
Как Expo и EAS заменяют Mac
Чтобы понять, что возможно, надо знать, почему Mac был обязателен. iOS-приложение нужно собрать в Xcode, инструменте Apple, который работает только на macOS, причём в достаточно свежей версии, чтобы не получить отказ ITMS-90725. Потом его надо подписать сертификатом, привязанным к твоему аккаунту разработчика, и отправить в App Store Connect.
Expo делит эту работу на три инструмента:
- Expo и React Native: ты пишешь приложение на JavaScript или TypeScript на любом компьютере.
- EAS Build: ты запускаешь команду со своего ПК, код уходит на Mac Expo, который собирает и подписывает приложение за тебя. На выходе файл, готовый к установке или отправке.
- EAS Submit: берёт эту сборку и отправляет её в App Store Connect. После обработки на стороне Apple, где проверяется, например, иконка (ITMS-90717), она появляется в TestFlight.
Mac в цепочке по-прежнему есть. Просто он уже не твой. Если хочешь понять, почему я советую этот стек новичкам, почитай страницу React Native и Expo для мобильного приложения.
Что можно делать с ПК на Windows
Писать код приложения
Вся разработка идёт на Windows без ограничений: твой редактор (VS Code, Cursor), Node.js, терминал. Если пишешь код с помощью Claude или ChatGPT, тоже ничего не меняется. Об этом читай как создать iOS-приложение с помощью ИИ.
Смотреть приложение на iPhone прямо во время разработки
Для старта есть приложение Expo Go: ставишь его на iPhone, оно считывает QR-код из терминала и загружает твой проект. Каждое изменение появляется на телефоне за несколько секунд. Идеально для первых экранов. С мая 2026 года версия Expo Go из App Store остаётся на SDK 54: создавай проект с совместимостью с ней или используй eas go и TestFlight для более нового SDK.
У Expo Go есть ограничение: в нём только нативные модули, которые поставляет Expo. Как только приложению нужна нативная библиотека, которой там нет, например SDK RevenueCat для подписок, тебе нужна development-сборка: твоя собственная версия приложения, собранная EAS Build, которую ты ставишь на iPhone.
Установить сборку на iPhone в обход App Store
В EAS есть внутреннее распространение. Регистрируешь iPhone командой eas device:create, потом запускаешь сборку с дистрибуцией internal. Получаешь ссылку на установку. Apple ограничивает этот способ: один аккаунт может так распространять приложение максимум на 100 iPhone в год, и каждое новое устройство требует новой сборки или новой подписи. Для тебя и пары близких этого с головой хватает.
Управлять сертификатами без Xcode
Подпись чаще всего ставит новичков в тупик даже на Mac, вплоть до ошибки ITMS-90034 при отправке. С EAS ты входишь в аккаунт Apple из командной строки, и инструмент может сам создать сертификат распространения и provisioning profile. Связку ключей ты вообще не открываешь.
Отправить приложение в Apple и опубликовать его
eas submit --platform ios отправляет сборку в App Store Connect. Можно объединить оба шага опцией --auto-submit у eas build. Всё остальное делается в браузере: страница в App Store, скриншоты, декларации конфиденциальности, подписки, TestFlight и отправка на проверку. App Store Connect это веб-приложение, и на Windows оно работает отлично.
Что невозможно (или сложнее) без Mac
Локальный симулятор iOS
Симулятор iOS входит в Xcode, поэтому на Windows он не запустится. На практике это не страшно: для тестов iPhone лучше симулятора. В сентябре 2026 года Expo анонсировал облачный симулятор iOS, EAS Simulator, на момент написания он ещё в ограниченном доступе. Не строй на нём рабочий процесс, пока он не откроется для всех.
Отладка нативного кода
Если краш идёт из нативного кода (Swift, Objective-C, неправильно настроенная библиотека), диагностические инструменты Apple находятся в Xcode. Без Mac ты зависишь от логов сборки EAS и инструмента вроде Sentry, который собирает краши установленного приложения. Это реально, но медленнее. Поэтому для первого приложения лучше держаться поддерживаемых библиотек, совместимых с Expo: это ещё и спасает от отказа ITMS-90338 при отправке.
Писать нативные расширения вручную
Виджеты, расширения уведомлений, особые нативные таргеты: с Expo это возможно через config-плагины, но без Xcode, чтобы заглянуть в сгенерированный проект, каждая ошибка стоит лишней сборки. Для первого приложения отложи эти функции на потом.
Локальная сборка
Локальные сборки EAS (опция --local) не поддерживаются на Windows. Значит, на ПК iOS-сборки идут через облако Expo. Бесплатный тариф EAS включает ограниченное число сборок в месяц, с очередью: проверь актуальные условия на странице тарифов Expo, прежде чем планировать интенсивную рабочую неделю.
Аккаунт Apple Developer: обязателен, без исключений
Никакая хитрость это не обходит, даже Apple Developer Enterprise Program, который предназначен для внутренних приложений крупных организаций. Без участия в Apple Developer Program нет ни App Store Connect, ни TestFlight, ни внутреннего распространения, ни отправки в App Store. Участие стоит 99 $ в год, списываются в твоей валюте.
Два совета перед регистрацией:
- Правильно выбери между индивидуальным аккаунтом и организацией. У индивидуального аккаунта продавцом в App Store отображается твоё имя. У организации название твоей компании, но тогда Apple требует номер D-U-N-S и более долгую проверку.
- Заложи несколько дней. Подтверждение аккаунта не всегда мгновенное. Регистрируйся, как только понял, что будешь публиковаться, а не накануне отправки.
Зачем на самом деле нужен iPhone для тестов
Технически можно опубликовать iOS-приложение, ни разу не подержав его в руках. Я категорически этого не советую, и Apple тоже: её правила проверки (guideline 2.1) требуют, чтобы приложение было протестировано на устройстве на баги и стабильность до отправки. А у твоих пользователей будет только это: настоящий iPhone.
Вот что покажет только настоящий iPhone:
- Реальный первый запуск, без dev-сервера: именно тут прячутся краши при старте.
- Встроенные покупки в тестовом окружении, чтобы проверить, что пейвол показывает правильные цены, а подписка действительно открывает приложение.
- Уведомления, камера, вибрация, разрешения, которые в других местах ведут себя иначе или не работают вовсе.
- Реальная вёрстка: вырез или Dynamic Island, домашняя полоска, клавиатура, закрывающая поле.
- Плавность, которую мощный компьютер часто скрывает.
Хватит недавнего б/у iPhone, если на нём идёт версия iOS, которую поддерживает твоя версия Expo SDK. И если можешь, одолжи ещё iPhone другого размера: приложение, которое нормально смотрится на большом экране, может обрезаться на маленьком. Именно за это я получил отказ на Solys, история в статье почему Apple отклоняет приложение.
Без Mac можно. Без iPhone ты отправляешь в Apple приложение, которое ни разу не видел в работе.
Шаги по порядку, с Windows
- Создай проект командой
npx create-expo-appи протестируй первые экраны в Expo Go. - Установи EAS CLI командой
npm install -g eas-cli, потомeas loginиeas build:configure. - Зарегистрируйся в Apple Developer Program, как только проект начнёт обретать форму.
- Зарегистрируй iPhone через
eas device:createи запусти development-сборку. - Создай страницу приложения в App Store Connect с тем же bundle identifier, что и в конфигурации Expo.
- Запусти production-сборку командой
eas build --platform ios. - Отправь её через
eas submit --platform ios, потом протестируй в TestFlight. Этот шаг подробно разобран в гайде TestFlight для тестирования приложения. - Заполни страницу и отправь на проверку из браузера. А рекламный текст потом можно менять без новой версии.
На этом этапе часто встречаются три ловушки. Номер сборки должен расти с каждой отправкой: включи автоинкремент в EAS и забудь об этом. Вопрос о шифровании блокирует каждую сборку, пока ты на него не ответишь: его можно задекларировать раз и навсегда в конфигурации приложения. И bundle identifier должен быть одинаковым везде, иначе EAS Submit не найдёт твоё приложение. Дальше, от страницы до одобрения, каждый шаг описан на странице публикация приложения в App Store.
Опубликовать первое приложение без Mac и не заблудиться
Mac больше не главное препятствие. Настоящие препятствия в другом: выбрать приложение, у которого есть шанс приносить деньги, подключить работающие подписки, подготовить пакет, который Apple примет. Именно это покрывает путь из четырёх шагов в iOS Kit, в своём темпе. Для пакета на проверку есть Apple Review Kit: мой чек-лист перед отправкой и заметки для ревьюера. На главной показано, как создать мобильное приложение не с нуля с Expo и Claude Code, с Mac или без.
Финальное решение о публикации остаётся за Apple, и никакой кит его не гарантирует. Что я могу дать, так это метод, который применяю на своих приложениях.
Частые вопросы
Как опубликовать iOS-приложение без Mac?
С Expo и React Native твой Mac заменяет Mac, размещённый у Expo. Ты пишешь код на любом компьютере, EAS Build собирает и подписывает приложение в облаке, потом EAS Submit отправляет его в App Store Connect. Ещё нужны платный аккаунт Apple Developer, браузер для заполнения страницы и iPhone, чтобы протестировать приложение по-настоящему.
Какие шаги нужны, чтобы опубликовать iOS-приложение с Windows?
Создай проект на Expo, установи EAS CLI и зарегистрируйся в Apple Developer Program. Зарегистрируй iPhone, запусти development-сборку, потом создай страницу в App Store Connect с тем же bundle identifier, что и в конфигурации Expo. Затем запусти production-сборку, отправь её через EAS Submit и протестируй в TestFlight, после чего заполни страницу и отправь приложение на проверку из браузера.
Сколько стоит опубликовать приложение в App Store?
Участие в Apple Developer Program стоит 99 $ в год, списываются в твоей валюте. Оно обязательно: без него нет ни App Store Connect, ни TestFlight, ни внутреннего распространения, ни отправки в App Store. Со стороны Expo бесплатный тариф EAS включает ограниченное число сборок в месяц, с очередью: проверь актуальные условия на странице тарифов Expo.
Нужен ли iPhone, чтобы опубликовать iOS-приложение без Mac?
Технически нет, но я категорически этого не советую, и Apple тоже: её правила проверки (guideline 2.1) требуют, чтобы приложение было протестировано на устройстве на баги и стабильность до отправки. Хватит недавнего б/у iPhone, если на нём идёт версия iOS, которую поддерживает твоя версия Expo SDK.
Как протестировать iOS-приложение без Mac?
Установи Expo Go на iPhone: он считывает QR-код из терминала и загружает проект, каждое изменение видно за несколько секунд. В Expo Go только нативные модули, которые поставляет Expo. Как только приложению нужна отсутствующая нативная библиотека, например SDK RevenueCat, нужна development-сборка, собранная EAS Build. Чтобы протестировать финальную сборку, читай TestFlight для тестирования приложения.
Какие ограничения у iOS-разработки без Mac?
Локальным симулятором iOS пользоваться нельзя: он входит в Xcode, поэтому на Windows не работает. Локальные сборки EAS (--local) на Windows не поддерживаются: iOS-сборки идут через облако Expo. Отлаживать нативный код и писать нативные расширения вручную можно, но сложнее, потому что инструменты Apple находятся в Xcode.