CI/CD для мобільних додатків: Fastlane, Codemagic, Bitrise та GitHub Actions
Ручна збірка та публікація мобільного додатку у 2025 році — це джерело помилок та витраченого часу. Забутий bump версії, неправильний provisioning profile, test-flight збірка з debug-логами в production — все це наслідки відсутності автоматизації.
Fastlane: Основа Автоматизації
Fastlane — де-факто стандарт для автоматизації iOS та Android збірок. Fastfile описує lanes — послідовності actions. Типова iOS-конфігурація:
lane :beta do
increment_build_number
match(type: "appstore")
gym(scheme: "MyApp", export_method: "app-store")
pilot(skip_waiting_for_build_processing: true)
end
match — це ключ до управління сертифікатами та provisioning profiles. Зберігає їх зашифрованими в git-репозиторії, синхронізує між машинами та CI. Альтернатива ручному управлінню в Xcode, яке ломається при кожному оновленні macOS. Важливо: match потребує окремого git-репозиторію (не основного), і пароль шифрування (MATCH_PASSWORD) зберігається як CI secret.
Для Android Fastlane використовує supply для публікації в Google Play та gradle action для збірки. Signing через keystore з змінними окруження — ніколи не коммітимо keystore в репозиторій.
Головна біль Fastlane: Ruby окруження. bundle exec fastlane через Bundler — обов'язково, інакше конфлікти версій гемів ломають CI в самий невідповідний момент.
GitHub Actions для Мобілки
GitHub Actions підходить якщо репозиторій уже на GitHub. Для iOS потрібен macOS runner — runs-on: macos-14 (Apple Silicon). GitHub-hosted macOS runners є, але вони повільніші та дорожче Linux. Self-hosted Mac mini у хмарі (MacStadium, Hetzner) під контролем Actions runner — більш економічний підхід для частих збірок.
Типовий workflow для iOS:
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: bundle exec fastlane beta
env:
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.ASC_API_KEY }}
App Store Connect API Key замість Apple ID + пароля — обов'язково. Apple ID з 2FA не працює надійно на CI. API Key створюється в App Store Connect → Users and Access → Keys.
Codemagic та Bitrise: Managed CI для Мобілки
Codemagic спеціалізується на Flutter та React Native, але підтримує нативні iOS/Android. Killer feature — конфігурація codemagic.yaml та macOS M2 машини без додаткової настройки. Code Signing автоматизований через UI: завантажуєш сертифікат та profile, Codemagic їх застосовує. Зручно для команд без DevOps.
Bitrise — більш enterprise-орієнтована платформа з багатим каталогом Steps (готові action-блоки). Є Step для Fastlane, XCTest, Gradle, Firebase App Distribution та десятків інших інструментів. Workflow Editor з візуальним інтерфейсом знижує поріг входу.
| Платформа | iOS Runner | Конфігурація | Найкращий Сценарій |
|---|---|---|---|
| GitHub Actions | macOS-hosted/self-hosted | YAML | Вже на GitHub, потрібна гнучкість |
| Codemagic | macOS M2 managed | YAML / UI | Flutter, швидкий старт |
| Bitrise | macOS managed | Visual + YAML | Велика команда, enterprise |
| Fastlane (local) | Будь-який macOS | Fastfile (Ruby) | Автоматизація локально + CI |
Distribution: TestFlight, Firebase App Distribution, Diawi
Для внутрішнього тестування iOS — TestFlight через pilot (Fastlane) або App Store Connect API. Для швидкої розповсюджень ad-hoc збірок без TestFlight — Firebase App Distribution (iOS + Android) або Diawi.
Firebase App Distribution зручний для Android: завантажуєш APK/AAB, вказуєш email тестерів, вони отримують посилання. На iOS обмежений ad-hoc профілями — UDID пристроїв потрібно додавати вручну, що незручно для великих груп тестувальників.
Версіонування та Тегування
Правило: кожна збірка, яка ушла на TestFlight або в Firebase, повинна мати унікальний build number і бути привязана до git-тегу. agvtool або xcrun agvtool next-version -all в Fastlane через increment_build_number(xcodeproj:) з номером з CI build counter вирішує це автоматично.
Терміни настройки: базовий CI/CD пайплайн з автозбіркою та розповсюдженням у TestFlight/Firebase — 3-5 днів. Повна автоматизація з кількома окруженнями (dev/staging/production), автоматичним тестуванням та ветвленням за git flow — 2-3 тижні.







