Собираем и публикуем Flutter-апп в AppStore
Автоматизация сборки Flutter-приложения для iOS с использованием macOS
В этой статье рассмотрим настройку автоматической сборки Flutter-приложения для iOS с использованием Fastlane на macOS.
В прошлом посте разбирали как собрать свой мини-ЦОД на Mac Mini
Шаг №0: Подготовка окружения
Для успешной сборки iOS-приложений требуется:
GitLab Runner в варианте `shell executor` (сборка в контейнере усложняет работу с Xcode)
Rbenv - менеджер версий Ruby
Fastlane - инструмент для автоматизации сборки и публикации приложений
Xcode - среда разработки, эмулятор и инструменты сборки
Установка компонентов
Xcode
Установка через командную строку:
Альтернативный способ - установка из AppStore
GitLab Runner
Установка через Homebrew
Fastlane и зависимости
Сначала нужно установить Bundler
А потом сам Fastlane
macOS уже содержит системную версию Ruby, но она недостаточна для сборки приложения. Обновление системного Ruby может нарушить работу системы, поэтому используем Rbenv для временного переопределения версии Ruby во время сборки.
Шаг №1: Конфигурация Fastlane
Типовая структура Flutter-проекта:
Для настройки iOS-сборки работаем в каталоге `ios/`.
Создание конфигурации Fastlane
Создайте папку `fastlane` в директории `ios/` со следующими файлами:
1. Appfile
Appfile конфигурирует основную информацию о приложении
рабочий пример:
2. Fastfile
Fastfile определяет lanes (задачи) для сборки
Мы используем немного модифицированный, но приведенный пример также рабочий.
3. auth.p8
Создайте пустой файл `auth.p8`, который будет заполняться ключом во время выполнения пайплайна.
Шаг №2: Настройка GitLab CI/CD пайплайна
Конфигурация задания сборки
Для сборки мы используем Gitlab CI, а значит дальше работаем с файлом .gitlab-ci.yml
Детальное описание скрипта
1. Сохранение ключа авторизации:
Ключ хранится в защищенной переменной GitLab `AUTHP8` и записывается в файл перед сборкой. Его мы берем с Apple Developer Portal. Обратите внимание, там достаточно большой список настроек, и вам нужно определиться с тем, какой именно ключ вам нужен. Может потребоваться несколько попыток %)
2. Установка номера сборки:
Используем ID пайплайна GitLab как номер сборки. нельзя загружать одну и ту же версию - будет отказ.
3. Обновление версии приложения:
Автоматическое обновление версии в `pubspec.yaml` по шаблону `1.{BUILD_NUMBER}.0+1`.
4. Процесс сборки:
- Установка версии Ruby через Rbenv
- Очистка предыдущих сборок
- Получение зависимостей Flutter и CocoaPods
- Запуск сборки через Fastlane
Данная конфигурация обеспечивает надежную автоматическую сборку Flutter-приложений для iOS с интеграцией в GitLab CI/CD.
Можно улучшить сборку, сохранением Cocoa pods в кеше или в артифакт регистри, но это буквально экономия на спичках. Для меня практически отсутствует разница между 7 и 9 минутами сборки приложения 🤷♂
Узнайте больше о нашей работе
🌐 Все проекты, кейсы и детали сотрудничества — на https://vin.team