Мобильная разработка

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 дня).

  1. Создать App ID в Apple Developer Portal (Bundle ID: com.company.app)
  2. Создать provisioning profile (Development, Ad Hoc, App Store Distribution)
  3. Собрать Archive в Xcode: Product -> Archive
  4. Загрузить в App Store Connect через Organizer или fastlane deliver
  5. TestFlight: пригласить тестировщиков (внутренних до 100, внешних до 10 000)
  6. Submit for Review: заполнить metadata, screenshots, age rating
  7. После одобрения: фазовый 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?

Связанные уроки

  • devops-09
Mobile CI/CD и Release

0

1

Войти