Настройка CodeMagic для CI/CD мобильного приложения
CodeMagic — CI/CD сервис, созданный специально для мобильной разработки. В отличие от GitHub Actions или GitLab CI, где нужно самому настраивать macOS-агенты, keychain, Xcode, Android SDK, CodeMagic предоставляет преднастроенные macOS/Linux машины с уже установленными инструментами. Для Flutter-проектов — особенно удобен: официально поддерживается Flet командой.
Два формата конфигурации
CodeMagic поддерживает GUI-конфигурацию (Workflow Editor) и codemagic.yaml. Для серьёзных проектов — только YAML: он версионируется в Git, изменения ревьюятся через PR.
# 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 в CodeMagic
CodeMagic предлагает два пути для iOS signing:
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. Надёжнее, контроль полный.
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 минут дополнительно на каждый билд.
Процесс
Регистрация в CodeMagic → подключение репозитория → написание codemagic.yaml → настройка signing (automatic или manual) → добавление environment groups с секретами → настройка publishing → тест-запуск → документация.
Срок: 2–3 дня для конфигурации одной платформы, до 5 дней для iOS + Android + Flutter с публикацией в обоих стора. Стоимость рассчитывается индивидуально.







