Как распространять приложения iOS среди тестировщиков с помощью fastlane

Вы можете распространять сборки среди тестировщиков с помощью fastlane – платформы с открытым исходным кодом, которая автоматизирует создание и выпуск приложений для iOS и Android. Это руководство содержит инструкции, определенные в Fastfile. После того как вы настроите fastlane и Fastfile, вы сможете интегрировать App Distribution с конфигурацией fastlane.

Подготовка

  1. Если вы ещё этого не сделали, добавьте Firebase в проект Apple.

    Если вы не используете другие продукты Firebase, вам нужно только создать проект и зарегистрировать приложение. Однако если вы решите использовать дополнительные продукты в будущем, обязательно выполните все шаги на странице, ссылку на которую мы привели выше.

  2. Откройте страницу App Distribution консоли Firebase. Выберите проект Firebase, когда появится запрос, выберите приложение с помощью переключателя приложений и нажмите Начать.

1. Как настроить fastlane

  1. Установите и настройте fastlane.

  2. Чтобы добавить App Distribution в конфигурацию fastlane, выполните следующую команду в корневом каталоге проекта iOS:

    fastlane add_plugin firebase_app_distribution

    Если команда предлагает варианты, выберите Option 3: RubyGems.org.

Шаг 2. Как пройти аутентификацию с помощью Firebase

Чтобы использовать плагин fastlane, сначала необходимо пройти аутентификацию в проекте Firebase одним из следующих способов: По умолчанию плагин fastlane ищет учетные данные в CLI Firebase, если не используется другой способ аутентификации.

Шаг 3. Как настроить Fastfile и распространить приложение

  1. В дорожку ./fastlane/Fastfile добавьте блок firebase_app_distribution. Для настройки распространения используйте следующие параметры:
    Параметры firebase_app_distribution
    app

    Требуется, только если в приложении нет файла конфигурации Firebase (GoogleService-Info.plist). Идентификатор приложения в Firebase. Идентификатор приложения можно найти в консоли Firebase на странице Общие настройки.

    app: "1:1234567890:ios:0a1b2c3d4e5f67890"
    googleservice_info_plist_path

    Путь к файлу GoogleService-Info.plist относительно пути к архиву товаров. По умолчанию задано значение GoogleService-Info.plist.

    Этот файл используется для получения идентификатора приложения Firebase, если параметр app не указан.

    firebase_cli_token

    Токен обновления, который выводится при аутентификации среды непрерывной интеграции с помощью интерфейса командной строки Firebase (подробнее о том, как использовать интерфейс командной строки с системами непрерывной интеграции…).

    service_credentials_file

    Путь к JSON-файлу сервисного аккаунта Google. Инструкции по аутентификации с использованием учетных данных сервисного аккаунта приведены выше.

    ipa_path

    Заменяет параметр "apk_path" (поддержка прекращена). Абсолютный путь к файлу IPA, который вы хотите загрузить. Если значение не указано, fastlane определяет местоположение файла по дорожке, на которой он был создан.

    release_notes
    release_notes_file

    Примечания к выпуску этой сборки.

    Вы можете указать примечания к выпуску напрямую:

    release_notes: "Text of release notes"

    Или укажите путь к файлу с обычным текстом:

    release_notes_file: "/path/to/release-notes.txt"
    testers
    testers_file

    Адреса электронной почты тестировщиков, которых вы хотите пригласить.

    Укажите тестировщиков в виде списка адресов электронной почты, разделенного запятыми:

    testers: "ali@example.com, bri@example.com, cal@example.com"

    Или укажите путь к текстовому файлу со списком адресов электронной почты, разделенных запятыми:

    testers_file: "/path/to/testers.txt"
    groups
    groups_file

    Группы тестировщиков, которых вы хотите пригласить (см. раздел Управление тестировщиками). Группы указываются с помощью псевдонимов групп, которые можно найти в консоли Firebase.

    Вы можете указать группы в виде списка, разделенного запятыми:

    groups: "qa-team, trusted-testers"

    Или укажите путь к текстовому файлу, содержащему список названий групп, разделенных запятыми:

    groups_file: "/path/to/groups.txt"
    test_devices
    test_devices_file

    Тестовые устройства, на которых агент тестирования приложений будет проводить тестирование.

    Укажите тестовые устройства в виде списка спецификаций, разделенных точкой с запятой:

    test_devices: "model=shiba,version=34,locale=en,orientation=portrait"

    Или укажите путь к текстовому файлу, содержащему список тестовых устройств, разделенных точкой с запятой:

    test_devices_file: "/path/to/test-devices.txt"
    test_username

    Имя пользователя для автоматического входа, которое будет использоваться во время тестирования агентом тестирования приложений.

    test_password
    test_password_file

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

    Вы также можете указать путь к текстовому файлу с паролем:

    test_password_file: "/path/to/test-password.txt"
    test_username_resource

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

    test_password_resource

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

    test_non_blocking

    Если задать этот параметр при выполнении тестов агента тестирования приложений, команда запустит тесты и сразу же вернет результат, не дожидаясь их завершения. Результаты тестирования можно посмотреть в консоли Firebase. Если этот флаг не задан, команда будет заблокирована до завершения тестов и выйдет с кодом ошибки, если какой-либо из тестов не пройдет.

    debug

    Логический флаг. Вы можете задать значение true, чтобы включить подробный вывод отладочной информации.

Пример:

platform :ios do
    desc "My awesome app"
    lane :distribute do
        build_ios_app(...)
        # build_ios_app is a built-in fastlane action.

        release = firebase_app_distribution(
            app: "1:123456789:ios:abcd1234",
            testers: "tester1@company.com, tester2@company.com",
            release_notes: "Lots of amazing new features to test out!"
        )

    end
end

Чтобы сборка стала доступна тестировщикам, запустите дорожку:

fastlane <lane>

Возвращаемое значение действия – это хеш, представляющий загруженную версию. Этот хеш также можно получить с помощью lane_context[SharedValues::FIREBASE_APP_DISTRO_RELEASE]. Подробнее о доступных полях в этом хеше можно узнать из документации по REST API.

После загрузки релиза плагин fastlane выводит следующие ссылки: Эти ссылки помогают управлять двоичными файлами и следить за тем, чтобы у тестировщиков и других разработчиков была правильная версия:

  • Ссылка на консоль Firebase, где показан один релиз. Вы можете поделиться этой ссылкой с другими разработчиками в вашей организации.
  • Ссылка на выпуск в интерфейсе тестировщика (веб-клип для iOS), с помощью которой тестировщики могут посмотреть примечания к выпуску и установить приложение на свое устройство. Чтобы воспользоваться ссылкой, у тестировщика должен быть доступ к выпуску.
  • Подписанная ссылка, по которой можно напрямую скачать и установить исполняемый файл приложения (IPA-файл). Срок действия ссылки истекает через час.

После распространения сборка будет доступна на панели управления App Distribution консоли Firebase в течение 150 дней. Когда до истечения срока действия сборки остается 30 дней, в консоли и в списке сборок на тестовом устройстве появляется уведомление.

Тестировщики, которые ранее не были приглашены для тестирования приложения, получат электронные письма с приглашениями. Существующие тестировщики получают уведомления по электронной почте о том, что новая сборка готова к тестированию. Подробнее о том, как установить тестовое приложение… Вы можете отслеживать статус каждого тестировщика, чтобы узнать, принял ли он приглашение и скачал ли приложение в консоли Firebase.

Чтобы автоматически увеличивать номер сборки при каждом создании новой версии в App Distribution, можно использовать действие firebase_app_distribution_get_latest_release и действие increment_build_number. В приведенном ниже коде показано, как автоматически увеличивать номер сборки:

lane :increment_version do
  latest_release = firebase_app_distribution_get_latest_release(
    app: "<your Firebase app ID>"
  )
  increment_build_number({ build_number: latest_release[:buildVersion].to_i + 1 })
end

Подробнее о получении информации о последнем выпуске приложения…

Шаг 4 (необязательный). Как управлять тестировщиками для распространения

Вы можете добавлять и удалять тестировщиков из проекта или группы, используя файл Fastfile или напрямую выполняя действия fastlane. Выполнение действий напрямую переопределяет значения, заданные в файле Fastfile.

После того как тестировщик добавлен в проект Firebase, его можно добавить в отдельные выпуски. Тестировщики, удаленные из проекта Firebase, больше не имеют доступа к его версиям, но могут сохранять доступ к ним в течение некоторого времени.

Если у вас много тестировщиков, рекомендуем использовать группы.

Fastfile

# Use lanes to add or remove testers from a project.
lane(:add_testers) do
  firebase_app_distribution_add_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) add testers to this group
  )
end

lane(:remove_testers) do
  firebase_app_distribution_remove_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) remove testers from this group only
  )
end
# Add or remove testers with the terminal
$ fastlane add_testers
$ fastlane remove_testers

Как выполнять действия fastlane

fastlane run firebase_app_distribution_create_group display_name:"QA Team" alias:"qa-team"
fastlane run firebase_app_distribution_add_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_remove_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_delete_group alias:"qa-team"

Вы также можете указать тестировщиков с помощью свойства --file="/path/to/testers.txt вместо --emails.

Задачи firebase_app_distribution_add_testers и firebase_app_distribution_remove_testers также принимают следующие аргументы:

  • project_number – номер проекта Firebase.
  • group_alias (необязательно). Если указано, тестировщики добавляются в указанную группу или удаляются из нее.
  • service_credentials_file: путь к файлу учетных данных сервиса Google.
  • firebase_cli_token – токен аутентификации для Firebase CLI.

service_credentials_file и firebase_cli_token – это одни и те же аргументы, используемые действием загрузки.

Шаг 5 (необязательно). Как посмотреть информацию о последнем выпуске приложения

Вы можете использовать действие firebase_app_distribution_get_latest_release, чтобы получить информацию о последнем выпуске приложения в App Distribution, включая сведения о версии приложения, примечания к выпуску и время создания. Например, можно автоматически увеличить номер версии и перенести примечания к выпуску из предыдущей версии.

Возвращаемое значение действия – это хеш, представляющий последний выпуск. Этот хеш также можно получить с помощью lane_context[SharedValues::FIREBASE_APP_DISTRO_LATEST_RELEASE]. Подробнее о полях, доступных в этом хеше, можно узнать из документации по REST API.

Параметры

Параметры функции firebase_app_distribution_get_latest_release
app

Требуется, только если в приложении нет файла конфигурации Firebase (GoogleService-Info.plist). Идентификатор приложения в Firebase. Идентификатор приложения можно найти в консоли Firebase на странице Общие настройки.

app: "1:1234567890:ios:0a1b2c3d4e5f67890"
googleservice_info_plist_path

Путь к файлу GoogleService-Info.plist относительно пути к архиву товаров. По умолчанию задано значение GoogleService-Info.plist.

Этот файл используется для получения идентификатора приложения Firebase, если параметр app не указан.

firebase_cli_token

Токен обновления, который выводится при аутентификации среды непрерывной интеграции с помощью интерфейса командной строки Firebase (подробнее о том, как использовать интерфейс командной строки с системами непрерывной интеграции…).

service_credentials_file

Путь к JSON-файлу сервисного аккаунта Google. Информацию о том, как выполнить аутентификацию с помощью учетных данных сервисного аккаунта, можно найти в более ранней документации.

service_credentials_json_data

Содержимое JSON-файла сервисного аккаунта Google. Информацию о том, как выполнить аутентификацию с помощью учетных данных сервисного аккаунта, можно найти в более ранней документации.

debug

Логический флаг. Вы можете задать значение true, чтобы включить подробный вывод отладочной информации.

Дальнейшие действия