Сборка мобильного приложения вручную — постоянная головная боль: то provisioning profile просрочен, то версия Xcode не та, то Android SDK не установлен. Мы сталкивались с этим на каждом втором проекте за несколько лет мобильной разработки. CodeMagic решает эти проблемы из коробки: предоставляет преднастроенные macOS и Linux агенты со всем необходимым инструментарием. Мы настроили CI/CD для 40+ проектов на iOS, Android и Flutter — и знаем, как сделать это быстро и надёжно.
Настраиваем CodeMagic под ключ: от подключения репозитория до публикации в App Store и Google Play. Оценим ваш проект за один день. В результате вы получаете автоматическую сборку при каждом пуше, прогон тестов и доставку билдов тестировщикам и в сторы. Экономия времени на ручных операциях достигает 80%.
Как выбрать между GUI и YAML?
CodeMagic поддерживает два способа конфигурации: Workflow Editor (GUI) и codemagic.yaml. Для серьёзных проектов выбирайте YAML — он версионируется в Git, изменения проходят ревью через Pull Request. GUI удобен для быстрой настройки прототипа, но в продакшене YAML даёт контроль и повторяемость. Мы рекомендуем YAML для проектов с длительностью разработки более месяца.
# codemagic.yaml workflows: android-release: name: Android Release max_build_duration: 60 environment: groups: - keystore_credentials - google_play_credentials vars: PACKAGE_NAME: "com.myapp.android" android_signing: - keystore_reference triggering: events: - push branch_patterns: - pattern: 'main' scripts: - name: Set build number script: | BUILD_NUMBER=$(($(google-play get-latest-build-number \ --package-name "$PACKAGE_NAME" \ --tracks=internal) + 1)) cd android && ./gradlew versionCode -PversionCode=$BUILD_NUMBER - name: Build Android script: | cd android ./gradlew bundleRelease artifacts: - android/app/build/outputs/bundle/**/*.aab publishing: google_play: credentials: $GCLOUD_SERVICE_ACCOUNT_CREDENTIALS track: internal submit_as_draft: false iOS-конфигурация
ios-release: name: iOS Release max_build_duration: 90 environment: groups: - appstore_credentials ios_signing: distribution_type: app_store bundle_identifier: com.myapp.ios scripts: - name: Set build number script: | BUILD_NUMBER=$(app-store-connect get-latest-build-number \ --app-id $APP_STORE_APP_ID) agvtool new-version -all $((BUILD_NUMBER + 1)) - name: Build iOS script: | xcode-project build-ipa \ --workspace "MyApp.xcworkspace" \ --scheme "MyApp" artifacts: - build/ios/ipa/*.ipa publishing: app_store_connect: api_key: $APP_STORE_CONNECT_PRIVATE_KEY key_id: $APP_STORE_CONNECT_KEY_IDENTIFIER issuer_id: $APP_STORE_CONNECT_ISSUER_ID submit_to_testflight: true beta_groups: - Internal Testers Почему code signing — самое узкое место?
Code signing для iOS — главный источник ошибок в CI/CD. Неправильный provisioning profile, истёкший сертификат, несовпадение bundle identifier — и сборка падает. CodeMagic предлагает два пути.
Automatic code signing — CodeMagic сам создаёт временный certificate и provisioning profile через App Store Connect API. Не требует Fastlane Match. Удобно, но зависит от прав CI-пользователя в App Store Connect.
Manual code signing — загружаешь .p12 и .mobileprovision в CodeMagic Encrypted Variables. Надёжнее, контроль полный.
Сравним оба подхода:
| Характеристика | Automatic code signing | Manual code signing |
|---|---|---|
| Время настройки | 10 минут | 30 минут |
| Контроль | Низкий | Полный |
| Зависимость от прав CI | Да | Нет |
| Срок жизни сертификата | Создаётся заново каждый раз | Используется ваш постоянный сертификат |
| Рекомендация | Для прототипов и внутренних тестов | Для продакшена |
Совет: храните сертификаты в зашифрованном виде
Для manual code signing всегда используйте Encrypted Variables. Никогда не храните .p12 в репозитории — даже приватном. Это стандарт безопасности, который мы проверяем на аудите.Как настроить CI/CD в CodeMagic за 5 шагов?
- Подключите репозиторий. Создайте проект в CodeMagic и привяжите GitHub, GitLab или Bitbucket. Укажите ветки для триггеров.
- Создайте codemagic.yaml. Определите окружения, скрипты сборки, артефакты и публикацию. Используйте шаблон из документации CodeMagic YAML reference.
- Настройте code signing. Выберите automatic или manual. Для manual — загрузите сертификаты в переменные.
- Настройте кэширование. Укажите пути к кэшам в секции cache — это ускорит сборку в 3-5 раз.
- Настройте публикацию. Добавьте publishing в apple_store_connect и google_play. Назначьте треки: internal test, beta, production. Каждый шаг занимает в среднем 20-40 минут, с учётом отладки.
Flutter в CodeMagic
flutter-multiplatform: name: Flutter Release environment: flutter: stable scripts: - name: Get dependencies script: flutter pub get - name: Run tests script: flutter test --coverage - name: Build Android script: | flutter build appbundle \ --release \ --dart-define=ENV=production - name: Build iOS script: | flutter build ipa \ --release \ --export-options-plist=/Users/builder/export_options.plist Кэширование зависимостей
cache: cache_paths: - $FLUTTER_ROOT/.pub-cache - $HOME/.gradle/caches - $HOME/Library/Caches/CocoaPods Без кэширования pod install и flutter pub get занимают 3–5 минут дополнительно на каждый билд. С кэшированием — до 20 секунд. Экономия до 10 часов в месяц при ежедневных сборках. На проектах с микросервисной архитектурой кэширование сокращает общее время CI/CD на 40%.
Сравнение сборки iOS, Android и Flutter в CodeMagic
| Платформа | Среднее время сборки (с кэшем) | Типичные артефакты | Частота падений |
|---|---|---|---|
| iOS | 15-25 мин | .ipa, dSYM | 5% из-за signing |
| Android | 10-20 мин | .aab, .apk, mapping | 2% из-за ProGuard |
| Flutter | 20-35 мин (обе платформы) | .ipa + .aab | 3% из-за version pin |
Что входит в нашу работу
Мы не просто настраиваем CodeMagic — мы строим надёжный CI/CD пайплайн под ключ:
- Аудит текущих процессов сборки и доставки
- Написание
codemagic.yamlс учётом вашего стека - Настройка code signing (automatic или manual)
- Интеграция с App Store Connect и Google Play Console
- Настройка кэширования и триггеров
- Документация процесса и схемы пайплайна
- Обучение команды (2 часа вебинара)
- Месяц поддержки после внедрения
Срок: от 2 дней для одной платформы до 5 дней для комплексного решения под iOS + Android + Flutter. Стоимость рассчитывается индивидуально. У нас за плечами 5+ лет опыта и 40+ успешных внедрений — гарантируем стабильную работу пайплайна.
Пишите — оценим ваш проект в течение одного рабочего дня. Получите консультацию и план внедрения.







