Ответ
Да, у меня есть опыт построения end-to-end CI/CD пайплайнов для нативных (iOS, Android) и кроссплатформенных (Flutter, React Native) мобильных приложений. Основная сложность здесь — работа с экосистемами App Store и Google Play, которые требуют подписанных сборок и имеют свои процессы ревью.
Ключевые задачи, которые решал:
-
Автоматизация сборки и подписи:
- Для Android использовал Gradle в сочетании с
keystore, хранящимся в зашифрованном виде в secrets-менеджере (например, в переменных окружения GitLab CI или в HashiCorp Vault). - Для iOS настраивал автоматическое управление сертификатами и provisioning profiles через Fastlane Match, что позволяло безопасно хранить их в приватном Git-репозитории и синхронизировать между разработчиками и CI-сервером (обычно на macOS-агенте).
- Для Android использовал Gradle в сочетании с
-
Многоступенчатые пайплайны:
# Пример структуры в GitLab CI stages: - test - build_staging - deploy_to_testers - build_production - deploy_to_store
android_unit_tests: stage: test script: ./gradlew testDebugUnitTest
ios_archive: stage: build_staging script:
- fastlane build_adhoc # Сборка для внутреннего тестирования
artifacts:
paths:
- *.ipa
deploy_to_firebase: stage: deploy_to_testers script:
- fastlane firebase_app_distribution only:
- develop
promote_to_play_store: stage: deploy_to_store script:
- fastlane supply --track internal # Постепенное обновление: internal -> alpha -> beta -> production only:
- main
-
Инструменты: Основным инструментом автоматизации был Fastlane, интегрированный с GitLab CI/CD и GitHub Actions. Для распространения бета-версий использовал Firebase App Distribution и TestFlight. Также настраивал автоматическое увеличение номеров версий и генерацию release notes на основе коммитов.
-
Особенности: Приходилось учитывать квоты на отправку сборок в TestFlight, время review в App Store Connect, а также необходимость ручного подтверждения для выпуска в production-трек Google Play. Для ускорения сборок активно использовал кеширование зависимостей (CocoaPods, Gradle) и Docker-образы с предустановленным SDK.