Настройка автоматической раздачи билдов через TestFlight

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Настройка автоматической раздачи билдов через TestFlight
Средний
от 1 дня до 3 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Настройка автоматической раздачи билдов через TestFlight

Ручная загрузка через Xcode Organizer — источник боли в любой iOS-команде. Забытый флаг include bitcode, устаревший сертификат, который лежит только на MacBook одного разработчика, Upload Error 409 без внятного объяснения — всё это останавливает доставку билда тестировщикам на несколько часов. Автоматическая загрузка в TestFlight через altool или Fastlane убирает человека из этой цепочки.

Проблема с сертификатами в CI

Главный технический барьер — Code Signing. В Xcode Organizer это происходит «само», потому что Xcode берёт сертификат и provisioning profile из связки ключей macOS. В CI такой связки нет. Без настройки получаем:

error: exportArchive: No signing certificate "iOS Distribution" found

Варианта два: match от Fastlane (рекомендуется для команд) или sigh + cert (для одиночного проекта). match хранит сертификаты и профили в зашифрованном Git-репозитории, CI клонирует его перед сборкой и импортирует в временную keychain. Не нужно пробрасывать файлы вручную.

Как устроена автоматическая загрузка

altool (устаревший, но ещё рабочий) и xcrun altool --upload-app требуют App Store Connect API Key. Сейчас Apple рекомендует xcrun notarytool для macOS и altool для iOS, но на практике Fastlane pilot (deliver для метаданных) надёжнее — он обрабатывает ошибки и ретраи.

Типичный Fastfile для TestFlight:

platform :ios do
  lane :beta do
    setup_ci  # настраивает временную keychain в CI

    match(
      type: "appstore",
      readonly: true,
      git_url: ENV["MATCH_GIT_URL"],
      password: ENV["MATCH_PASSWORD"]
    )

    increment_build_number(
      build_number: ENV["CI_BUILD_NUMBER"] || Time.now.to_i.to_s
    )

    build_app(
      scheme: "MyApp",
      configuration: "Release",
      export_method: "app-store"
    )

    upload_to_testflight(
      api_key_path: "fastlane/api_key.json",
      skip_waiting_for_build_processing: true,
      changelog: ENV["CHANGELOG"] || "Automated build"
    )
  end
end

skip_waiting_for_build_processing: true важен — без него Fastlane блокируется на 10–20 минут, пока Apple обрабатывает билд. В CI это занимает слот агента впустую.

App Store Connect API Key

Apple убрала поддержку логина по паролю (App-Specific Password) для altool в конце 2023 года. Теперь обязательно API Key. Создаётся в App Store Connect → Users and Access → Integrations. Нужна роль не ниже App Manager. Ключ (AuthKey_XXXXXX.p8) хранится в секретах CI, путь к нему передаётся через api_key_path или через переменные окружения APP_STORE_CONNECT_API_KEY_KEY_ID, APP_STORE_CONNECT_API_KEY_ISSUER_ID, APP_STORE_CONNECT_API_KEY_KEY.

Группы тестировщиков в TestFlight добавляются автоматически: groups: ["Internal Testers", "QA Team"] в upload_to_testflight. Внешние тестировщики требуют прохождения бета-ревью — это уже ограничение Apple, не автоматизируемое.

Инкремент Build Number

TestFlight отклоняет билд с тем же CFBundleVersion, что уже загружен. Стандартный подход — использовать номер сборки из CI: CI_BUILD_NUMBER в GitHub Actions, $CI_PIPELINE_IID в GitLab, $BITRISE_BUILD_NUMBER в Bitrise. Либо git rev-list --count HEAD как монотонно возрастающее число.

Процесс

Настройка App Store Connect API Key → конфигурация match для CI → написание Fastfile → тестирование на реальном CI-агенте с macOS → настройка групп тестировщиков → документация.

Срок: 1–3 дня в зависимости от того, настроен ли match уже или нужно выстраивать с нуля. Стоимость рассчитывается индивидуально.