Мобильная разработка
Mobile CI/CD и Release
Пятница. Команда выпустила обновление. Понедельник: 1-звёздочные отзывы, crash rate 15%. Нужен hotfix срочно, но ручной процесс публикации занимает полдня: сборка, подписание, загрузка, ожидание review. Автоматизированный CI/CD: от коммита до TestFlight - 20 минут.
- Spotify: 2 iOS релиза в неделю через полностью автоматизированный Fastlane pipeline - от тега в git до TestFlight без ручных действий
- Instagram: фазовый Android rollout - начинают с 1%, мониторят crash rate в Firebase Crashlytics 2 часа, затем 10%, 50%, 100%
- Uber Driver App: keystore потеря в 2017 привела к переводу 14 миллионов водителей на новое приложение за 6 месяцев
Fastlane: автоматизация мобильной разработки
Fastlane - Ruby-based инструмент автоматизации: сборка, тестирование, подписание, публикация в App Store и Play Store. Конфигурация в Fastfile через lanes (цепочки actions). Интегрируется с GitHub Actions, Bitrise, CircleCI.
Fastlane scan = xcodebuild + xcpretty. Fastlane gym = xcodebuild + xcarchive + экспорт IPA. Fastlane match - централизованное управление сертификатами через git repo или S3. Альтернатива match: Xcode Cloud с автоматическим code signing от Apple.
Что такое Fastlane match и зачем он нужен в команде?
App Store Connect: публикация и управление iOS приложением
App Store Connect - Apple's portal для управления iOS приложениями. Ключевые процессы: сборка через Xcode/Xcode Cloud, загрузка через Transporter или fastlane deliver, TestFlight для бета-тестирования, App Review для публикации (1-3 дня).
- Создать App ID в Apple Developer Portal (Bundle ID: com.company.app)
- Создать provisioning profile (Development, Ad Hoc, App Store Distribution)
- Собрать Archive в Xcode: Product -> Archive
- Загрузить в App Store Connect через Organizer или fastlane deliver
- TestFlight: пригласить тестировщиков (внутренних до 100, внешних до 10 000)
- Submit for Review: заполнить metadata, screenshots, age rating
- После одобрения: фазовый rollout (1% -> 5% -> 10% -> 50% -> 100%)
App Store Review Guidelines - 400+ правил. Самые частые причины реджекта: Privacy Nutrition Labels неполные (25%), платёжный flow нарушает 30% комиссию Apple (15%), crash при review (10%). fastlane pilot загружает в TestFlight без Web UI. App Store Connect API (REST) для автоматизации через GitHub Actions.
Для чего используется фазовый rollout при релизе iOS приложения?
Google Play Console: Android release pipeline
Google Play Console предоставляет несколько треков для релиза: Internal Testing (внутренняя команда, мгновенно), Closed Testing (alpha, до 2000 тестировщиков), Open Testing (beta, любой желающий), Production (полный rollout с процентами). Review занимает часы, не дни.
AAB (Android App Bundle) vs APK: AAB позволяет Play Store доставлять оптимизированный APK под конкретное устройство (нужные ABI, density, language). Размер уменьшается на 15-20%. С 2021 года Google требует AAB для новых приложений. App Signing by Google - Google управляет app signing key, разработчик только upload key.
Чем AAB (Android App Bundle) выгоднее APK при публикации в Play Store?
Code Signing: сертификаты, ключи, provisioning
Code signing - криптографическая подпись приложения, гарантирующая что код не изменён после подписания. iOS требует подписи для каждой установки (даже симулятор в debug). Android - keystore для Play Store, debug keystore для разработки.
КРИТИЧНО: потеря Android keystore = невозможность обновить приложение в Play Store. Нужно создавать новое приложение с нуля. Хранить в AWS KMS, Bitwarden, или зашифрованном vault. iOS сертификаты менее критичны - Apple может отозвать и выпустить новые, но provisioning profiles нужно обновить на всех устройствах.
Почему потеря Android keystore критична, а потеря iOS сертификата менее опасна?
Ключевые идеи
- Fastlane: lanes = chains of actions. match - централизованные сертификаты, gym - сборка IPA, deliver - App Store.
- Фазовый rollout: 1% -> 5% -> 100% с мониторингом crash rate - снижает риск критических регрессий.
- Android keystore НИКОГДА не терять - потеря = невозможность обновлять приложение без создания нового.
Связанные темы
CI/CD pipeline строится поверх тестирования и архитектурных решений:
- Unit и UI Testing — Fastlane scan запускает тесты как обязательный gate в pipeline перед сборкой и публикацией
- Mobile Architecture at Scale — Feature flags и crash reporting (Crashlytics, Sentry) - инструменты из pipeline для безопасных релизов
Вопросы для размышления
- Как организовать хранение Android keystore и iOS сертификатов в команде из 10 разработчиков без Fastlane match?
- Какой crash rate threshold использовать как сигнал остановить фазовый rollout?
- Когда имеет смысл использовать Xcode Cloud вместо GitHub Actions + Fastlane для iOS?