Налаштування Appcenter для CI/CD мобільного додатку
Microsoft AppCenter — це не тільки дистрибуція тестових білдів. Це повноцінний CI/CD для мобільних додатків: збірка по триггеру з Git, тестування на реальних пристроях через Device Farm, публікація в TestFlight та Google Play, crash analytics. Усе в одному сервісі, без налаштування інфраструктури.
Структура проекту в AppCenter
Для кожного додатку (iOS та Android) створюється окремий "app" в AppCenter. Організація називається "org" — під нею групуються всі apps. Типова структура:
MyCompany (Organization)
├── MyApp-iOS (App)
│ ├── Build (CI)
│ ├── Test (Device Farm)
│ ├── Distribute
│ └── Diagnostics (Crashes)
└── MyApp-Android (App)
├── Build (CI)
├── Distribute
└── Diagnostics
Налаштування Build через YAML
AppCenter підтримує appcenter-post-clone.sh, appcenter-pre-build.sh, appcenter-post-build.sh — скрипти, які запускаються на відповідних етапах. Більш гнучкий підхід — appcenter.yml (Preview):
trigger:
branches:
include:
- main
- release/*
pool:
vmImage: macos-latest
steps:
- task: InstallAppleCertificate@2
inputs:
certSecureFile: distribution.p12
certPwd: $(P12_PASSWORD)
- task: InstallAppleProvisioningProfile@1
inputs:
provisioningProfileLocation: secureFiles
provProfileSecureFile: MyApp_AppStore.mobileprovision
- script: |
cd ios && pod install --repo-update
displayName: 'Install CocoaPods'
- task: Xcode@5
inputs:
actions: 'build'
scheme: 'MyApp'
xcWorkspacePath: 'ios/MyApp.xcworkspace'
exportPath: '$(Build.ArtifactStagingDirectory)'
exportOptions: 'plist'
exportOptionsPlist: 'ios/ExportOptions.plist'
signingOption: 'manual'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
Post-build скрипти
Якщо YAML-конфігурація недоступна, appcenter-post-build.sh вимикається після успішної збірки:
#!/usr/bin/env bash
# Відправка в App Distribution
appcenter distribute release \
--app "$APPCENTER_APP_ID" \
--file "$APPCENTER_OUTPUT_DIRECTORY/MyApp.ipa" \
--group "QA Team" \
--release-notes "Build $APPCENTER_BUILD_ID"
# Уведомлення в Slack
curl -X POST "$SLACK_WEBHOOK_URL" \
-H 'Content-type: application/json' \
--data "{\"text\":\"New build $APPCENTER_BUILD_ID is available\"}"
APPCENTER_OUTPUT_DIRECTORY, APPCENTER_BUILD_ID — вбудовані змінні окруження AppCenter.
Змінні окруження та секрети
Build Configuration → Environment Variables. Sensitive значення помічаються як "Secret" — вони шифруються та не показуються в логах. Стандартний набір:
-
P12_PASSWORD— пароль до сертифіката -
KEYSTORE_PASSWORD— Android keystore -
FIREBASE_APP_ID— для Crashlytics/App Distribution -
SLACK_WEBHOOK_URL— сповіщення
Тестування на реальних пристроях
AppCenter Device Farm дозволяє запускати UI-тести (XCUITest, Espresso) на реальних пристроях:
# Upload та запуск XCUITest
appcenter test run xcuitest \
--app "MyOrg/MyApp-iOS" \
--devices "MyOrg/top-ios-devices" \
--test-series "main" \
--locale "ru_RU" \
--build-dir DerivedData/Build/Products/Debug-iphoneos
Device sets створюються в AppCenter UI — можна вибрати конкретні моделі та версії iOS/Android.
Обмеження AppCenter CI
AppCenter Build не підтримує складні матричні збірки, кастомні Docker-образи для Android, кешування Gradle на рівні організації. Для продвинутих сценаріїв AppCenter CI комбінують із зовнішнім CI (GitHub Actions для основної збірки, AppCenter — тільки для дистрибуції та тестування).
Процес
Створення apps в AppCenter → підключення репозиторію → налаштування Build Configuration → додання signing (для iOS) → написання post-build скриптів → налаштування Distribution → тест-запуск → документація.
Тривалість: 2–3 дні. Вартість розраховується індивідуально.







