Налаштування CI/CD для iOS-додатків через Bitrise
Bitrise—хмарний CI/CD, заточений під мобільну розробку. Його головна відмінність від GitHub Actions або GitLab CI: всі кроки (Steps)—готові блоки в Workflow Editor з UI-настройкою, та більшість мобільних сценаріїв настроюються без написання yaml з нуля. Для команд без DevOps-експерта—це знижує поріг входу.
Workflow Editor та структура конфігурації
Bitrise зберігає конфігурацію в bitrise.yml у корені репозиторія. Редагувати можна через UI або безпосередньо в yaml. Базовий iOS workflow:
workflows:
primary:
steps:
- activate-ssh-key: {}
- git-clone: {}
- certificate-and-profile-installer: {}
- cocoapods-install:
inputs:
- is_cache_disabled: "false"
- xcode-test:
inputs:
- scheme: MyApp
- simulator_device: iPhone 15
- xcode-archive:
inputs:
- scheme: MyApp
- distribution_method: ad-hoc
- deploy-to-bitrise-io: {}
- firebase-app-distribution:
inputs:
- app: $FIREBASE_APP_ID
- groups: qa-team
certificate-and-profile-installer—Bitrise-специфічний Step, завантажує сертифікати з вкладки Bitrise Code Signing. Завантажуйте через Web UI:
- Distribution certificate (.p12 + passphrase)
- Provisioning profile (.mobileprovision)
xcode-archive Step автоматично використовує завантажені сертифікати через BITRISE_CERTIFICATE_URL та BITRISE_CERTIFICATE_PASSPHRASE змінні оточення. Відключіть Xcode Automatic Signing в xcode-archive:
- xcode-archive:
inputs:
- automatic_code_signing: api-key # або certificate
api-key режим використовує App Store Connect API Key (кращий варіант—не закінчується як сертифікати).
Паралельні workflows та тригери
Bitrise підтримує кілька workflows з різними тригерами:
trigger_map:
- push_branch: main
workflow: deploy
- push_branch: "feature/*"
workflow: test-only
- pull_request_target_branch: main
workflow: pr-check
test-only workflow запускає тільки тести без архівації—економить ~10 хвилин на кожен push у feature-гілку.
Кешування
Bitrise використовує кеш через Steps save-cache / restore-cache:
- restore-cache:
inputs:
- key: "cocoapods-{{ checksum \"Podfile.lock\" }}"
- path: ./Pods
- cocoapods-install: {}
- save-cache:
inputs:
- key: "cocoapods-{{ checksum \"Podfile.lock\" }}"
- path: ./Pods
SPM-залежності кешуються через ~/Library/Developer/Xcode/DerivedData—можна додати до path аналогічно.
Обмеження порівняно з self-hosted
Bitrise—тільки хмара. Раннери: Xcode 15 (macOS 13), Xcode 16 (macOS 14) тощо—вибираються в machine type. Найшвидший—M2 Elite XL (~4 хвилини на архівацію середнього проекту). Стоимость залежить від плану; при інтенсивній розробці на команду з 5+ осіб хмарні хвилини закінчуються швидко.
Для сборки кожного коміту + нічних UI-тестів на реальних пристроях—Bitrise + Device Testing (Firebase Test Lab або власна device farm).
Типові проблеми при настройці
- Невідповідність bundle ID у provisioning profile та PRODUCT_BUNDLE_IDENTIFIER у xcconfig—xcode-archive падає з No profile for... signed for running on device
- Версія CocoaPods на Bitrise-стеку відрізняється від локальної—додайте gem install cocoapods --version X.X.X у Script Step
- Не встановлений BITRISE_SCHEME—xcode-test використовує першу доступну схему, що може бути не тією
Часова шкала
Базова настройка Bitrise (test + archive + TestFlight): 2–4 дні. Повна конфігурація з паралельними workflows, Device Testing, кешуванням, Slack/Jira-інтеграцією: 1–1.5 тижня. Стоимость рассчитывается индивидуально.







