Ответ
Современный CI/CD для iOS часто строится на связке Fastlane и облачного CI-сервиса (например, GitHub Actions или Bitrise).
Основные этапы пайплайна:
- Триггер: Событие в системе контроля версий (push в ветку, pull request).
- Сборка зависимостей:
bundle install(для Fastlane) иpod install/xcodebuild -resolvePackageDependencies. - Тестирование:
# Fastlane lane run_tests( scheme: "MyApp", devices: ["iPhone 15"], output_directory: "./test_results" ) - Сборка артефакта:
# Сборка .ipa или .xcarchive build_app( scheme: "MyApp", export_method: "app-store", output_directory: "./build" ) - Распространение:
- Внутреннее тестирование: Загрузка в TestFlight (
upload_to_testflight) или Firebase App Distribution. - Бета-тестирование: Загрузка в сервисы вроде TestFlight для внешних тестеров.
- Продакшен: Автоматическая отправка в App Store Connect (
upload_to_app_store).
- Внутреннее тестирование: Загрузка в TestFlight (
Пример конфигурации 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), инкрементальные сборки, параллельное выполнение тестов.