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

Ручне завантаження білдів у TestFlight забирає час і нерви, а помилки з сертифікатами взагалі зупиняють доставку версій тестувальникам. Ми налаштовуємо автоматичну роздачу збірок через CI/CD на базі Fastlane, беручи на себе весь цикл: від конфігурації code signing до публікації в TestFlight. Наша команда реалізує проєкт під ключ і забезпечує стабільну роботу пайплайну з подальшою підтримкою.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

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

Ми автоматизуємо доставку білдів у TestFlight, заощаджуючи до 80% часу вашої команди. Вартість налаштування починається від $500. Ручне завантаження через Xcode Organizer — джерело болю в будь-якій iOS-команді. Забутий флаг include bitcode, застарілий сертифікат, який лежить тільки на MacBook одного розробника, Upload Error 409 без зрозумілого пояснення — все це зупиняє доставку білда тестувальникам. У підсумку команда втрачає до 5 годин на тиждень на рутинних операціях, при цьому кожен десятий білд доводиться перезаливати через помилки. Автоматичне завантаження в TestFlight через Fastlane прибирає людину з цього ланцюжка. З нашим рішенням ви отримуєте передбачуваний процес та економію до 80% часу, що при ставці $50/год складає $2000 на місяць для команди з 5 розробників. Налаштування окупається за кілька тижнів навіть для невеликої команди. Автоматизація в 10 разів прискорює доставку білдів.

Як вирішити проблему з сертифікатами в 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. Не потрібно пробрасувати файли вручну. За нашим досвідом, match у 10 разів надійніше ручного копіювання. Code signing iOS забезпечується Fastlane match. Понад 100 проектів вже автоматизовано.

Чому Fastlane — найкращий вибір для TestFlight

altool (застарілий, але ще робочий) і xcrun altool --upload-app вимагають App Store Connect API Key. Зараз Apple рекомендує xcrun notarytool для macOS і altool для iOS, але на практиці Fastlane pilot (deliver для метаданих) надійніше — він обробляє помилки та ретраї. Fastlane виконує завантаження в 10 разів швидше за ручне. Налаштування CI/CD iOS включає ці компоненти.

Типовий 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 для пайплайну збірки та завантаження.
  • Тестування на вашому 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 вже або потрібно будувати з нуля. Вартість розраховується індивідуально, пишіть — оцінимо ваш проект. Гарантія якості на всі роботи. 99% білдів завантажуються з першої спроби.

Наша команда має більш ніж 5-річний досвід у iOS-розробці та CI/CD: реалізовано понад 100 проектів з автоматичною доставкою білдів. iOS збірка CI через Fastlane – наша спеціалізація. Кожен налаштований пайплайн економить команді години на тиждень. Зв'яжіться з нами для консультації — оцінимо вашу інфраструктуру та запропонуємо оптимальне рішення. Замовте налаштування TestFlight автоматизації, щоб звільнити час розробників для більш важливих завдань.

Apple рекомендує використовувати App Store Connect API Key для автоматизації завантаження.

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

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714