Как опубликовать iOS приложение без MacBook — мой опыт с Codemagic
Я разработчик Flutter приложений. Делаю мобильные приложения. Недавно столкнулся с проблемой которую наверняка знают многие разработчики под iOS: чтобы собрать и опубликовать приложение в App Store, нужен MacBook. Причём не просто любой — а с актуальной версией macOS и свежим Xcode.
У меня был старый MacBook с неподдерживаемой версией macOS. Я даже установил macOS через OpenCore Patcher — специальный инструмент для запуска новых версий на старом железе. Но когда дошло до публикации в App Store, Apple выдала ошибку: SDK version issue. Приложение должно быть собрано с iOS 26 SDK и Xcode 26. А это требует macOS 26, которую мой старый Mac физически не тянет.
Казалось бы — тупик. Покупать новый MacBook только ради одной сборки? Нанимать кого-то? Я начал искать решение и нашёл его — Codemagic.
Что такое Codemagic простыми словами
Представьте что у вас есть друг с мощным новым MacBook Pro, который готов в любое время собрать ваше приложение и отправить его прямо в App Store. Вы просто говорите ему "собери" — и через 15-20 минут приложение уже в Appstore.
Codemagic — это именно такой "друг", только в виде облачного сервиса. Это CI/CD платформа (Continuous Integration / Continuous Delivery — автоматическая сборка и доставка приложений) специально заточенная под мобильную разработку. На их серверах стоят настоящие Mac Mini M2 и M4 с актуальными версиями Xcode — вы подключаете свой код с GitHub, нажимаете кнопку и сервис собирает приложение в облаке.
Весь процесс происходит в браузере. Никакого MacBook не нужно. Работает с Windows, Linux, любого компьютера.
Сколько это стоит
Тут самое интересное. Бесплатно.
Точнее — бесплатный план даёт 500 минут сборки в месяц на машинах Apple Silicon M2. Этого вполне хватает для небольших проектов. Одна сборка Flutter приложения занимает примерно 15-30 минут — то есть в месяц можно делать 15-30 сборок бесплатно.
Если нужно больше — платный тариф стоит $0.10 за минуту сверх лимита. То есть одна дополнительная сборка обойдётся примерно в $1.5-3. Для разовой публикации это копейки.
Бесплатные минуты обновляются каждое 1-е число месяца.
Что умеет Codemagic
- Собирает iOS и Android приложения в облаке
- Автоматически подписывает приложение сертификатами Apple
- Загружает готовый IPA прямо в App Store Connect
- Отправляет в TestFlight для тестирования
- Работает с Flutter, React Native, нативным iOS/Android, Unity
- Интегрируется с GitHub, GitLab, Bitbucket
- Поддерживает настройку через удобный интерфейс или через YAML файл
Моя история — от проблемы до публикации
Расскажу как это было у меня на реальном примере. Я разрабатывал Flutter приложение для ресторана. Приложение с меню, онлайн-заказами, оплатой через ЮКасса, бронированием столиков.
На Android под Windows всё работало отлично — собрал APK, загрузил в RuStore. А вот с iOS началась история.
Проблема: Старый Mac. Мой MacBook не поддерживал нужную версию macOS. Я попробовал через OpenCore — завис на сборке, не хватало памяти. Далее кое как доходил до билда и вдруг, ошибка: SDK version issue. All iOS apps must be built with the iOS 26 SDK. То есть требуется IOS 26 SDK.
Решение: Codemagic. Зарегистрировался на codemagic.io, подключил GitHub репозиторий, настроил сборку. Через 20 минут IPA файл был готов и загружен в App Store Connect. Магия.
Правда, не всё прошло гладко — расскажу про подводные камни чуть ниже.
Пошаговая инструкция: публикуем iOS приложение через Codemagic
Шаг 1 — Регистрация
Заходите на codemagic.io и регистрируетесь через GitHub аккаунт. Это важно — ваш код должен лежать на GitHub (или GitLab/Bitbucket).
Шаг 2 — Загрузите код на GitHub
Если кода ещё нет на GitHub:
- Создайте новый приватный репозиторий на github.com
- Скачайте GitHub Desktop — desktop.github.com
- File → Add Local Repository → выберите папку с проектом
- Commit и Publish repository
Важно перед загрузкой удалите папки:
- build/
- .dart_tool/
- ios/Pods/
Они большие и не нужны — Codemagic сам всё восстановит.
Шаг 3 — Подключите репозиторий в Codemagic
После регистрации Codemagic предложит подключить репозиторий. Выбираете GitHub, авторизуете доступ, выбираете нужный репозиторий.
Шаг 4 — Создайте API ключ в App Store Connect
Это нужно чтобы Codemagic мог загружать приложение в ваш аккаунт Apple.
- Заходите на appstoreconnect.apple.com
- Пользователи и доступ → Интеграция → API App Store Connect
- Нажмите + чтобы создать новый ключ
- Дайте название (например "Codemagic"), выберите доступ Менеджер приложений
- Скачайте файл .p8 — он скачивается только один раз! Сохраните его.
- Запомните Key ID (вида ABC123DEFG) и Issuer ID (длинный UUID)
Шаг 5 — Добавьте переменные в Codemagic
В Codemagic → ваше приложение → Environment variables. Создайте группу codesigning и добавьте:
APP_STORE_CONNECT_KEY_ID - Key ID из App Store ConnectAPP_STORE_CONNECT_ISSUER_ID - Issuer ID из App Store ConnectAPP_STORE_CONNECT_PRIVATE_KEY - Содержимое .p8 файла (весь текст включая BEGIN/END)CERTIFICATE_PRIVATE_KEY Ваш приватный ключ сертификата Apple (RSA ключ)
Все переменные отмечайте галочкой Secret — они будут зашифрованы.
Шаг 6 — Создайте файл codemagic.yaml
В корне вашего проекта создайте файл codemagic.yaml. Это инструкция для Codemagic — что делать при сборке. Вот базовый вариант для Flutter:
Замените com.yourcompany.yourapp на Bundle ID вашего приложения.
Загрузите этот файл на GitHub.
Шаг 7 — Настройте интеграцию с App Store Connect в Codemagic
В Codemagic → Settings → Integrations → App Store Connect → добавьте ключ который создали на шаге 4.
Шаг 8 — Запустите сборку
Нажмите Start new build → выберите ветку main → Start build.
Следите за прогрессом в реальном времени — все логи доступны прямо в браузере. Видно каждый шаг: установка зависимостей, pod install, компиляция, подпись, загрузка.
Шаг 9 — Проверьте TestFlight
Через 15-30 минут после успешной сборки зайдите в App Store Connect → ваше приложение → TestFlight. Там появится новая сборка. Apple обработает её ещё 15-30 минут и она станет доступна тестировщикам.
Подводные камни о которых никто не предупреждает
Было бы нечестно писать только про хорошее. Поделюсь с чем столкнулся:
1. CocoaPods и сторонние SDK
Если в вашем Flutter приложении есть iOS зависимости со сложными Pod зависимостями (например платёжные SDK) — будьте готовы к боли.
2. Firebase и Xcode 26
Firebase iOS SDK версий 11.x несовместим с компилятором в Xcode 26. Пришлось обновить Flutter пакеты до актуальных версий. Следите за версиями зависимостей — они должны поддерживать последние Xcode.
3. Время сборки
Первая сборка всегда дольше — скачиваются все зависимости с нуля. Последующие быстрее. У меня первая сборка занимала 15 минут, последующие 10.
4. Логи
Если что-то пошло не так — не паникуйте. Codemagic показывает подробные логи каждого шага. Читайте внимательно — ошибка обычно очевидна.
Итого — стоит ли оно того?
Однозначно да. Особенно если:
- У вас нет MacBook или он старый
- Вы разрабатываете на Windows
- Вам нужно сделать разовую публикацию
- Вы хотите автоматизировать процесс выпуска обновлений
500 бесплатных минут в месяц — это реально щедро для индивидуального разработчика. Для публикации одного приложения и нескольких обновлений в месяц этого более чем достаточно.
Я потратил несколько часов на настройку из-за специфики своего проекта (ЮКасса SDK давала проблемы). Но это не проблема Codemagic — это особенность конкретной зависимости. Сам сервис работает отлично.
Теперь процесс выглядит так: внёс изменения в код → push на GitHub → нажал Start build → через 15 минут новая версия в TestFlight. Без MacBook, без лишних телодвижений.
Полезные ссылки
- Codemagic: codemagic.io
- Документация: docs.codemagic.io
- GitHub Desktop: desktop.github.com
Если у вас остались вопросы по настройке — пишите в комментариях. Постараюсь помочь.