Как опубликовать iOS приложение без MacBook — мой опыт с Codemagic

Как опубликовать 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:

  1. Создайте новый приватный репозиторий на github.com
  2. Скачайте GitHub Desktop — desktop.github.com
  3. File → Add Local Repository → выберите папку с проектом
  4. Commit и Publish repository

Важно перед загрузкой удалите папки:

  • build/
  • .dart_tool/
  • ios/Pods/

Они большие и не нужны — Codemagic сам всё восстановит.

Шаг 3 — Подключите репозиторий в Codemagic

После регистрации Codemagic предложит подключить репозиторий. Выбираете GitHub, авторизуете доступ, выбираете нужный репозиторий.

Шаг 4 — Создайте API ключ в App Store Connect

Это нужно чтобы Codemagic мог загружать приложение в ваш аккаунт Apple.

  1. Заходите на appstoreconnect.apple.com
  2. Пользователи и доступ → Интеграция → API App Store Connect
  3. Нажмите + чтобы создать новый ключ
  4. Дайте название (например "Codemagic"), выберите доступ Менеджер приложений
  5. Скачайте файл .p8 — он скачивается только один раз! Сохраните его.
  6. Запомните 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:

workflows: ios-release: name: iOS Release to TestFlight instance_type: mac_mini_m2 environment: groups: - codesigning flutter: stable xcode: latest cocoapods: default integrations: app_store_connect: My App Store Key scripts: - name: Install dependencies script: | flutter clean flutter pub get cd ios pod install --repo-update cd .. - name: Set up keychain script: keychain initialize - name: Fetch signing files script: | app-store-connect fetch-signing-files com.yourcompany.yourapp \ --type IOS_APP_STORE \ --create \ --certificate-key="@env:CERTIFICATE_PRIVATE_KEY" - name: Add certificates to keychain script: keychain add-certificates - name: Set up code signing script: xcode-project use-profiles - name: Build IPA script: flutter build ipa --release artifacts: - build/ios/ipa/*.ipa publishing: app_store_connect: api_key: $APP_STORE_CONNECT_PRIVATE_KEY key_id: $APP_STORE_CONNECT_KEY_ID issuer_id: $APP_STORE_CONNECT_ISSUER_ID submit_to_testflight: true

Замените 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, без лишних телодвижений.

Полезные ссылки

Если у вас остались вопросы по настройке — пишите в комментариях. Постараюсь помочь.

11