Опишите типичный CI/CD пайплайн для iOS-проекта.

«Опишите типичный CI/CD пайплайн для iOS-проекта.» — вопрос из категории DevOps, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Современный CI/CD для iOS часто строится на связке Fastlane и облачного CI-сервиса (например, GitHub Actions или Bitrise).

Основные этапы пайплайна:

  1. Триггер: Событие в системе контроля версий (push в ветку, pull request).
  2. Сборка зависимостей: bundle install (для Fastlane) и pod install / xcodebuild -resolvePackageDependencies.
  3. Тестирование:
    # Fastlane lane
    run_tests(
      scheme: "MyApp",
      devices: ["iPhone 15"],
      output_directory: "./test_results"
    )
  4. Сборка артефакта:
    # Сборка .ipa или .xcarchive
    build_app(
      scheme: "MyApp",
      export_method: "app-store",
      output_directory: "./build"
    )
  5. Распространение:
    • Внутреннее тестирование: Загрузка в TestFlight (upload_to_testflight) или Firebase App Distribution.
    • Бета-тестирование: Загрузка в сервисы вроде TestFlight для внешних тестеров.
    • Продакшен: Автоматическая отправка в App Store Connect (upload_to_app_store).

Пример конфигурации GitHub Actions:

name: CI
on: [push]
jobs:
  build-and-test:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Bundler Dependencies
        run: bundle install
      - name: Run Tests
        run: bundle exec fastlane tests
      - name: Build and Upload to TestFlight
        if: github.ref == 'refs/heads/main'
        run: bundle exec fastlane beta

Ключевые практики: Кеширование производных данных (DerivedData), инкрементальные сборки, параллельное выполнение тестов.