Магия CI/CD для мобильных приложений

В быстро меняющемся мире разработки мобильных приложений фраза «время — деньги» как никогда актуальна. Каждая минута, потраченная на рутинные задачи, украдена у инноваций и улучшений. Именно здесь на помощь приходят непрерывная интеграция и непрерывное развёртывание (CI/CD), а в сочетании с Fastlane результаты могут быть поистине волшебными.

Что такое Fastlane?

Fastlane — это инструмент с открытым исходным кодом, который автоматизирует различные аспекты процесса разработки мобильных приложений. Это всё равно что иметь личного ассистента, который выполняет рутинные задачи и позволяет сосредоточиться на том, что действительно важно — создании замечательного приложения. С помощью Fastlane можно автоматизировать такие задачи, как сборка, подписание и развёртывание приложения, делая весь цикл разработки более плавным и эффективным.

Настройка конвейера CI/CD

Чтобы начать работу с Fastlane в конвейере CI/CD, вам понадобятся несколько ключевых компонентов:

1. Fastfile: сердце Fastlane

Fastfile — это центральный файл конфигурации для Fastlane. Он определяет различные рабочие процессы или «полосы», которые вы можете запустить для своего приложения. Вот простой пример Fastfile для проекта iOS:

default_platform(:ios)

platform :ios do
  project_path = "myProject/myProject.xcodeproj"

  desc "Запустить тесты iOS"
  lane :test do
    run_tests(project: project_path)
  end

  desc "Собрать и заархивировать приложение"
  lane :build do
    build_app(scheme: "MyApp", configuration: "Release")
  end

  desc "Опубликовать приложение в App Store"
  lane :publish do
    upload_to_app_store
  end
end

Этот Fastfile определяет три полосы: test, build и publish. Каждая полоса выполняет определённую задачу: от запуска тестов до публикации приложения в App Store.

2. Интеграция Fastlane с вашим инструментом CI

Существует несколько инструментов CI, каждый из которых имеет свои сильные и слабые стороны. Вот несколько популярных:

GitLab

GitLab предлагает бесшовную интеграцию с Fastlane через функции Mobile DevOps. Вот как это настроить:

  • Создайте файл .gitlab-ci.yml в корневом каталоге вашего проекта.
  • Определите этапы и задания для вашего конвейера CI/CD.
stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - bundle install
    - fastlane build

test:
  stage: test
  script:
    - bundle install
    - fastlane test

deploy:
  stage: deploy
  script:
    - bundle install
    - fastlane publish
  only:
    - main

Эта конфигурация файла устанавливает три этапа: build, test и deploy. Каждый этап запускает соответствующую полосу Fastlane.

Buildkite

Buildkite — ещё один мощный инструмент CI, который хорошо интегрируется с Fastlane. Вот как его настроить:

  • Используйте предоставленный Buildkite шаблон Fastlane для iOS, чтобы быстро приступить к работе.
  • Настройте свой конвейер для запуска полос Fastlane.
# Пример конфигурации конвейера для Buildkite
steps:
  - label: "Сборка и тестирование"
    command: "bundle exec fastlane test"
    agents:
      queue: "ios"

  - label: "Развёртывание в App Store"
    command: "bundle exec fastlane publish"
    agents:
      queue: "ios"
    depends_on:
      - "Сборка и тестирование"

Эта конфигурация сначала запускает полосу test, а затем полосу publish, обеспечивая тщательное тестирование приложения перед его развёртыванием в App Store.

3. Автоматизация тестирования и проверки на соответствие стандартам

Автоматизированное тестирование и проверка на соответствие стандартам являются важными компонентами любого конвейера CI/CD. Вот как вы можете интегрировать их в рабочий процесс Fastlane:

Тестирование

Fastlane предоставляет действие scan для запуска модульных тестов и UI-тестов для вашего проекта iOS.

lane :test do
  scan(
    scheme: "MyApp",
    configuration: "Debug",
    devices: ["iPhone 13"]
  )
end

Проверка на соответствие стандартам

Для проверки на соответствие стандартам вы можете использовать SwiftLint для обеспечения соответствия стандартам кодирования.

lane :lint do
  swiftlint(
    mode: "lint",
    config_file: ".swiftlint.yml"
  )
end

4. Управление подписанием кода и подготовкой профилей

Одной из самых утомительных частей разработки мобильных приложений является управление подписанием кода и профилями подготовки. Fastlane упрощает этот процесс с помощью таких действий, как match и sigh.

lane :setup_code_signing do
  match(
    type: "appstore",
    readonly: true
  )
  sigh(
    ad_hoc: true
  )
end

Визуализация конвейера CI/CD

Чтобы лучше понять поток вашего конвейера CI/CD, вот диаграмма последовательности с использованием синтаксиса Mermaid:

sequenceDiagram participant Разработчик participant Git participant CI participant Fastlane participant AppStore Note over Разработчиком, Git: Отправка изменений кода Разработчик->>Git: git push Note over Git, CI: Запуск конвейера CI Git->>CI: Веб-перехватчик Note over CI, CI: Извлечение кода и установка зависимостей CI->>CI: bundle install Note over CI, Fastlane: Запуск полос Fastlane CI->>Fastlane: fastlane test Fastlane->>CI: Результаты теста Note over CI, Fastlane: Сборка и архивирование приложения CI->>Fastlane: fastlane build Fastlane->>CI: Артефакты сборки Note over CI, Fastlane: Публикация приложения в App Store CI->>Fastlane: fastlane publish Fastlane->>AppStore: Загрузить приложение Note over AppStore, Разработчиком: Приложение доступно AppStore->>Разработчику: Уведомление

Заключение

Создание конвейера CI/CD для мобильных приложений с помощью Fastlane меняет правила игры. Он автоматизирует утомительные задачи, обеспечивает согласованность и ускоряет цикл разработки. Интегрируя Fastlane с выбранным вами инструментом CI, вы можете создать надёжный и эффективный конвейер, который значительно облегчит вашу жизнь как разработчика.

Так что в следующий раз, когда вы обнаружите, что вручную собираете, тестируете и развертываете своё приложение, вспомните: есть способ получше. Позвольте Fastlane справиться с рутинной работой, а вы сможете сосредоточиться на том, что у вас получается лучше всего — на создании замечательных мобильных приложений. Удачного программирования!