Irbisa · Шпаргалка
CI/CD и DevOps
GitHub Actions, Fastlane, Firebase Distribution, flavors
Чем APK отличается от AAB и что нужно, чтобы собрать подписанный релиз для Google Play и App Store?
// android/app/build.gradle.ktsimport java.util.Properties val keystoreProperties = Properties().apply { val file = rootProject.file("key.properties") // gitignored, written by CI if (file.exists()) file.inputStream().use { load(it) }…Как управлять версиями Flutter-приложения: имя версии, номер сборки и кто их повышает?
Trunk-based или GitFlow для мобильного приложения: как выпустить хотфикс для версии в сторе, если в
mainуже лежат недоделанные фичи следующей недели?# Store: 1.4.2 (tag v1.4.2). main: 1.5 work, unfinished parts behind flags.# 1) The fix is merged into main through a normal PR first.FIX=$(git log origin/main --format=%H -1 --grep='fix: crash on empty cart') # 2) Branch from what users run, not from main.git switch -c release/1.4 v1.4.2 # or switch to the existing release/1.4…Что такое flavors во Flutter и как настроить сборки dev, staging и production?
// android/app/build.gradle.ktsandroid { flavorDimensions += "environment" productFlavors { create("dev") { dimension = "environment"…Чем
--dart-define-from-fileотличается от--flavorи как сборка, подписанная для production, может ходить в staging API?// flutter build appbundle --flavor prod --dart-define-from-file=config/prod.json// config/prod.json: {"API_URL": "https://api.example.com"}import 'package:flutter/services.dart' show appFlavor; class AppConfig { // const and no defaultValue: a missing define is an empty string, never "dev"…Что такое fastlane и что он даёт по сравнению с самописным скриптом в CI?
# ios/fastlane/Fastfiledefault_platform(:ios) platform :ios do before_all do setup_ci # temporary keychain; no-op outside CI…Как выбрать между GitHub Actions, Codemagic, Bitrise и Xcode Cloud для Flutter-приложения?
Как подписывать Android- и iOS-сборки в CI без утечки ключей?
# .github/workflows/release.yml (Android part)jobs: android: runs-on: ubuntu-latest environment: production # secrets released only after approval steps:…Как раздавать бета-сборки: Firebase App Distribution, TestFlight или тестовые треки Play?
# .github/workflows/beta.ymlname: betaon: push: branches: [main]…Как автоматизировать загрузку в Play Store и App Store из CI?
# android/fastlane/Fastfiledefault_platform(:android) platform :android do lane :internal do upload_to_play_store(…По каким причинам App Review или Google Play обычно отклоняют Flutter-приложение и как поймать их до отправки?
В debug приложение работает, а в release падает или остаётся без сети. Какие причины типичны и как поймать их раньше пользователей?
#!/usr/bin/env bashset -euo pipefail # 1) Build the binary users will get; `flutter test` never builds it.flutter build apk --release --flavor prod \ --dart-define-from-file=config/prod.json \…iOS-джоба в CI падает с «Generated.xcconfig must exist», хотя Xcode на раннере тот же, что у вас. Чего не хватает свежему клону?
#!/usr/bin/env bashset -euo pipefail # Pin the Xcode this project is tested with; images ship several.sudo xcode-select -s "/Applications/Xcode_${XCODE_VERSION}.app"…Как бы вы спроектировали CI/CD для Flutter-приложения: что запускается на каждый pull request, что на релиз и на каких раннерах?
# .github/workflows/ci.ymlname: cion: pull_request: push: tags: ['v*']…Что делает Flutter-приложение готовым к первому релизу в production, помимо зелёных тестов?
Каждый pull request ждёт CI 40 минут. Куда уходит время во Flutter-пайплайне и что резать в первую очередь?
name: cion: [pull_request] concurrency: # a new push cancels the old run group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true…Как раскатывать релиз поэтапно и что делать, если новая версия оказалась сломанной?
Что такое code push через Shorebird, что может изменить патч и как принудительно перевести пользователей на новую версию, когда патч не поможет?
# The store build must come from Shorebird, not from plain `flutter build`.# Arguments after `--` are passed through to flutter build.shorebird release android --flavor prod -- --dart-define-from-file=config/prod.jsonshorebird release ios --flavor prod -- --dart-define-from-file=config/prod.json # Later: a Dart-only fix for users on 1.4.2+87, built with the same defines.…В монорепозитории с приложением и пятнадцатью пакетами правка одной строки запускает все тесты. Как тестировать в CI только то, что она может сломать?
# pubspec.yaml at the repo root (pub workspace + Melos 7)name: acme_workspaceenvironment: sdk: ^3.9.0workspace: - apps/shop…