Автоматическая раздача билдов в TestFlight: настройка CI/CD

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

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Автоматическая раздача билдов в TestFlight: настройка CI/CD
Средний
от 1 дня до 3 дней

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

Часто задаваемые вопросы

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

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

Как решить проблему с сертификатами в 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. Не нужно пробрасывать файлы вручную.

Почему Fastlane — лучший выбор для TestFlight

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. Теперь обязательно 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. Apple Developer Documentation

Группы тестировщиков в 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 как монотонно возрастающее число.

Способ Пример Монотонность CI-зависимость?
git rev-list --count 1234 высокая нет
CI_BUILD_NUMBER 12345 средняя (сбрасывается при новом проекте) да
дата-штамп YYYYMMDD-N низкая (может быть неуникальным) нет

Какие проблемы решает автоматизация?

Проблема Ручная загрузка Автоматизация
сертификаты один разработчик носит с собой хранятся в зашифрованном репозитории
загрузка билда 10–20 минут в Xcode 2–3 минуты через CI
ошибки 409, непонятные коды логи и автоматические ретраи
тестировщики приглашать вручную авто-добавление через группы

Что входит в работу

  • Настройка App Store Connect API Key и его интеграция в CI.
  • Конфигурация Fastlane match для безопасного хранения сертификатов.
  • Написание Fastfile для pipeline сборки и загрузки.
  • Тестирование на вашем CI-агенте (macOS).
  • Документация по процессу для команды.
  • Обучение разработчиков работе с автоматизацией.
Типичные ошибки при настройке - Использование устаревшего altool вместо Fastlane: пропускает ошибки. - Неверный api_key_path: указывайте абсолютный путь в CI. - Забытая роль App Manager: ключ не сможет загружать билды. - Блокировка CI при ожидании обработки: ставьте `skip_waiting_for_build_processing: true`.

Процесс

  1. Анализ текущей CI-инфраструктуры и сертификатов.
  2. Настройка App Store Connect API Key и секретов.
  3. Развёртывание match-репозитория.
  4. Написание Fastfile с обработкой ошибок.
  5. Пробный запуск на CI-агенте.
  6. Документирование и передача знаний.

Сроки и стоимость

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

Наша команда имеет более чем 5-летний опыт в iOS-разработке и CI/CD: реализовано более 50 проектов с автоматической доставкой билдов. Каждый настроенный пайплайн экономит команде часы в неделю. Свяжитесь с нами для консультации — оценим вашу инфраструктуру и предложим оптимальное решение. Закажите настройку TestFlight автоматизации, чтобы освободить время разработчиков для более важных задач.

Apple рекомендует использовать App Store Connect API Key для автоматизации загрузки.