Конфигурация Fastlane в Swift все еще находится в стадии бета-тестирования, но она работает! В этом примере я покажу вам, как автоматизировать распространение в TestFlight с помощью Fastlane.
Простая установка!

Шаги

1. Настройка. Генерация конфигурации
2. Обзор конфигурации
3. Автоматическое увеличение номеров версий. Настройка проекта
4. Передача параметров. Окончательная настройка
5. Исполнение. Ошибки
6. Gitignore

1. Настройка. Создать конфигурацию

Установите fastlane с помощью Homebrew

brew install fastlane

или RubyGems

sudo gem install fastlane -NV

Чтобы сгенерировать конфигурацию, перейдите в терминал в каталог проекта и запустите

fastlane init swift

Я выбрал автоматическое распространение бета-версии для TestFlight

В вашем приложении может быть несколько схем. Fastlane может попросить вас выбрать одного из них.

Если требуемая схема отсутствует в списке, вы должны отметить ее как общую, отменить текущий процесс с помощью Ctrl + C и снова ввести fastlane init swift.

Затем введите учетные данные разработчика Apple ID.

Прохождение двухфакторной аутентификации:

Если в учетной записи есть несколько команд App Store Connect или Developer Portal, выберите свои команды

Наша установка fastlane создана и готова к использованию, но я предлагаю проверить ее и отредактировать, если необходимо.

2. Обзор конфигурации

Вы можете открыть сгенерированный проект конфигурации /fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj в Xcode.

Будем работать с Appfile и Fastfile. Вам не следует редактировать их аналоги из /fastlane/swift каталога, потому что они будут перезаписаны или заменены во время сборки.

Проект FastlaneSwiftRunner содержит правильный файл приложения и файл Fastfile из /fastlane.

Appfile.swift хранит глобальные переменные и конфигурации, которые можно использовать в Fastfile. Например, мы можем добавить appVersion переменную и изменить ее перед загрузкой в ​​TestFlight, но мы автоматизируем эту задачу позже.

Fastfile.swift содержит наши «дорожки» - автоматизированные задачи (автоматическое распространение AppStore или TestFlight и т. Д.)

Внутри полосы «бета» вы видите различные действия:

incrementBuildNumber() - увеличивает номер сборки
buildApp()— создает файл .ipa в каталоге проекта
uploadToTestflight() - загружает сборку в TestFlight

Все доступные действия перечислены здесь https://docs.fastlane.tools/actions/ и готовы к использованию в нашем проекте в качестве функций. Автозаполнение Xcode поможет вам.

Имя функции имеет значение. Суффикс «Lane» означает, что функция описывает команду, которая может быть вызвана с терминала по оставшейся части имени. Итак, команда fastlane beta запускает betaLane() func

Любая пользовательская функция без окончания Lane может быть добавлена ​​в файл и не будет анализироваться как дорожка

Отредактируем сгенерированный код. Я обнаружил, что параметр teamId отсутствует в вызове uploadToTestflight() func. Это актуально для AppleIds с двумя или более учетными записями разработчиков. Поэтому, если teamId не указан, fastlane будет спрашивать вас каждый раз, когда вы запускаете эту строку.

Я заменил жестко запрограммированный username на appleID, определенный в файле приложения, и добавил параметр teamId. Другие жестко запрограммированные значения, такие как рабочая область или схема, также можно переместить в файл приложения.

Еще одно изменение, которое я сделал, - это автоинкремент номера версии. Это действие выполняет функция incrementVersionNumber(). Но использование дополнительных действий требует небольшой подготовки.

3. Автоматическое увеличение номеров версий. Настройка проекта

Обычно мы устанавливаем здесь номера сборки и версии.

В этом случае Xcode изменит версию пакета и строку версии пакета (короткую) на $ (CURRENT_PROJECT_VERSION) и $ (MARKETING_VERSION). Fastlane не может работать с этими переменными

Поэтому нам нужно скопировать значения из General на вкладку Info, и мы не будем менять версию и номер сборки на General в будущем.

Версия приложения (строка версии пакета) может содержать только цифры (0–9) и точки. Каждое целое число предоставляет информацию о выпуске в формате [Major]. [Minor]. [Patch]
Примеры: 2 , 41.3 , 1.31.5
Подробнее https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring

Инкрементальная функция incrementVersionNumber() по умолчанию увеличивает последнее число, используя значение по умолчанию patch. Чтобы изменить другой номер, установите параметр bumpType на minor или major

Выглядит неплохо, но давайте добавим возможность отправлять bumpType с терминала!

4. Передача параметров. Окончательная настройка

class Fastfile: LaneFile {
    func betaLane(withOptions options:[String: String]?) {
        
        let appVersion = options?["appVersion"]
        let bumpTypeOptional = options?["bumpType"]
        let bumpType = bumpTypeOptional ?? "patch"
        
        if appVersion != nil, bumpTypeOptional != nil {
            echo(message: "Only one parameter can be used: appVersion or bumpType")
            return
        }
        
        if !["major", "minor", "patch"].contains(bumpType) {
            echo(message: "Unknown parameter value \(bumpType)")
            return
        }
        
        desc("Push a new beta build to TestFlight")
        incrementBuildNumber(xcodeproj: "Reminder.xcodeproj")
        incrementVersionNumber(bumpType: bumpType, versionNumber: appVersion, xcodeproj: "Reminder.xcodeproj")
        buildApp(workspace: "Reminder.xcworkspace", scheme: "Reminder")
        uploadToTestflight(username: appleID, teamId: teamID)
    }

Все действительные сигнатуры функций, которые могут получать входные параметры, описанные здесь

Https://medium.com/@doruvil/fatlane-continous-integration-swift-version-b8851f1f38b6

Наша дорожка может обрабатывать appVersion или bumpType параметры.
Для настройки любой версии используйте параметр appVersion

fastlane beta appVersion:3.2.13

Для увеличения первого или второго числа передайте major или minor в качестве значения bumpType, patch является значением по умолчанию.

fastlane beta bumpType:major

Если получены оба параметра или неверное значение для bumpType, программа выводит сообщение об ошибке на терминал и завершает работу.

5. Исполнение. Ошибки

Чтобы увеличить номер сборки, номера версий, сгенерировать новую сборку и загрузить ее в команду запуска TestFlight с параметрами или без них.

fastlane beta
fastlane beta appVersion:<version>
fastlane beta bumpType:<major/minor>

Во время выполнения Fastlane может запросить пароль для конкретного приложения. Следовать инструкции

Наконец, у меня есть ошибка, но сборка загружена успешно. Просто дождитесь письма от App Store

6. Гитиньор

Добавить в gitignore

*.ipa
*.dSYM.*
/fastlane/report.xml
/fastlane/FastlaneRunner

Ссылки

Https://developer.apple.com/library/archive/qa/qa1827/_index.html

Https://medium.com/flawless-app-stories/build-it-test-it-deliver-it-complete-ios-guide-on-continuous-delivery-with-fastlane-and-jenkins-cbe44e996ac5