Збірка мобільного додатку вручну — постійний головний біль: то 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+ успішних впроваджень — гарантуємо стабільну роботу пайплайну.
Пишіть — оцінимо ваш проєкт протягом одного робочого дня. Отримайте консультацію та план впровадження.







