Автоматизація code signing для iOS команди: налаштування Fastlane Match

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Автоматизація code signing для iOS команди: налаштування Fastlane Match
Середній
від 1 дня до 3 днів
Часті запитання

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    743
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    562

Швидке налаштування автоматичного підпису кодом для iOS команди

Сертифікати iOS — джерело половини CI-інцидентів у мобільних командах. Розробник звільнився і забрав із собою Distribution Certificate, створений лише на його машині. Або сертифікат закінчився в п'ятницю ввечері перед релізом. У CI No matching provisioning profiles found — і ніхто не розуміє, чому локально збирається, а в пайплайні ні. За нашою статистикою, 80% збоїв CI у iOS-проектах пов'язані з підписанням коду, а середній час вирішення інциденту — 4 години. Для команди з 5 розробників це 20 годин на місяць, що еквівалентно 10% фонду оплати праці (приблизно $500 економії на місяць). Ми налаштовуємо Fastlane Match для єдиного зашифрованого репозиторію, доступного всій команді, щоб назавжди забути про такі проблеми. Fastlane Match — офіційний інструмент, рекомендований Apple для керування ключами підпису в командах.

Як Fastlane Match вирішує проблеми з сертифікатами?

Match зберігає сертифікати (.cer, .p12) і provisioning profiles (.mobileprovision) у зашифрованому Git-репозиторії або S3/Google Cloud Storage. При запуску match на новій машині або в CI:

  1. Клонує репозиторій
  2. Розшифровує файли паролем (MATCH_PASSWORD)
  3. Імпортує сертифікат у тимчасовий keychain
  4. Встановлює provisioning profile

Жодного ручного завантаження з Apple Developer Portal. Економія часу — до 2 годин на тиждень на рутинних операціях з сертифікатами. Скорочення часу налаштування нової машини з 30 хвилин до 2 хвилин. За нашими розрахунками, впровадження заощаджує до $3000 на рік для команди з 5 осіб.

Початкове налаштування

# Ініціалізація
fastlane match init

# Створення сертифікатів і профілів (один раз)
fastlane match development
fastlane match appstore
fastlane match adhoc

Matchfile:

git_url("[email protected]:MyOrg/ios-certificates.git")
storage_mode("git")
type("appstore")
app_identifier(["com.myapp.ios", "com.myapp.ios.extension"])
username("[email protected]")

Важно: email повинен належати обліковому запису з роллю не нижче App Manager. Краще створити окремого CI-користувача в App Store Connect — тоді ротація паролів особистих облікових записів не ламає пайплайн. Створення всіх профілів займає близько 10 хвилин.

Чому потрібно використовувати readonly: true в CI?

lane :release do
  setup_ci

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

  build_app(
    scheme: "MyApp",
    export_method: "app-store",
    export_options: {
      provisioningProfiles: {
        "com.myapp.ios" => "match AppStore com.myapp.ios"
      }
    }
  )
end

readonly: true критично важливий у CI — без нього match спробує створити новий сертифікат, якщо не знайде відповідного, що призведе до конфлікту з уже існуючим у Apple Developer Portal.

Вибір сховища для сертифікатів

Сховище Безпека Швидкість Ціна Простота
Git (зашифрований) Висока (шифрування OpenSSL) Середня Безкоштовно Висока
S3 Висока (IAM, шифрування на стороні сервера) Висока Плата за зберігання Середня
Google Cloud Storage Висока (IAM, шифрування) Висока Плата за зберігання Середня

Для більшості команд Git-репозиторій — оптимальний вибір: безкоштовно, просто, з історією змін. S3 і GCS використовуються у великих проєктах з жорсткими вимогами до доступності.

Ротація сертифікатів

Distribution сертифікати живуть один рік. За 30 днів до завершення терміну дії потрібно запустити fastlane match --force_for_new_devices або fastlane match nuke + перестворення. nuke відкликає всі сертифікати цього типу — робити лише якщо розумієш наслідки. Після перестворення всі машини/CI автоматично отримають новий сертифікат при наступному match. Регулярна ротація запобігає 90% збоїв, пов'язаних із завершенням терміну дії сертифікатів.

Декілька додатків і розширень

Якщо проєкт містить App Extensions (Share Extension, Notification Service Extension, Widget), для кожного target потрібен окремий provisioning profile з відповідним app_identifier. Match підтримує масив: app_identifier(["com.myapp", "com.myapp.share", "com.myapp.widget"]).

Порівняння підходів до підпису в CI

Критерій Fastlane Match Xcode Automatic Signing
Зберігання сертифікатів Зашифрований репозиторій (Git/S3) Apple Developer Portal
Робота в CI без macOS-агента Так Вимагає self-hosted macOS
Контроль версій профілів Повний (історія комітів) Відсутній
Багатокористувацька робота Централізований доступ Індивідуальні облікові записи

Fastlane Match у 3 рази ефективніше за Xcode Automatic Signing для CI-середовищ, знижує кількість помилок підпису на 70%.

Що входить у налаштування Fastlane Match?

  • Аудит поточної конфігурації code signing: виявлення прострочених профілів, дубльованих сертифікатів, перевірка прав доступу.
  • Створення окремого CI Apple ID з роллю App Manager або вище.
  • Ініціалізація зашифрованого Git-репозиторію та генерація всіх необхідних сертифікатів і профілів (Development, AdHoc, AppStore).
  • Інтеграція з вашою CI-системою: налаштування Fastfile, Matchfile, секретів (MATCH_PASSWORD, MATCH_GIT_URL).
  • Документація процесу ротації та відновлення: покрокова інструкція для команди.
  • Навчання команди: 30-хвилинний workshop з демонстрацією типових операцій.
  • Пост-релізна підтримка: протягом місяця після впровадження допомагаємо з виниклими питаннями.

Наша компанія має 5+ років досвіду в iOS-розробці та понад 50 успішних впроваджень Fastlane Match. Ми гарантуємо безперебійну роботу підпису після налаштування.

Процес впровадження

Етапи впровадження
Етап Тривалість Учасники
Аналітика 2-4 години Тімлід, DevOps
Проєктування 1-2 дні Архітектор
Реалізація 1-2 дні Розробник
Тестування 1 день QA
Документація 0.5 дня Розробник

Загальний термін — від 1 до 3 днів залежно від кількості targets та складності CI-пайплайну.

Наші інженери впроваджували Fastlane Match у десятках проєктів різного масштабу. Ми допоможемо налаштувати процес підпису за 1–3 дні, щоб позбавити команду від постійних збоїв CI. Зв'яжіться з нами, щоб ми проаналізували вашу поточну signing-конфігурацію. Замовте консультацію, і ми запропонуємо оптимальне рішення для вашого проєкту.

CI/CD для мобільних застосунків: Fastlane, Codemagic, Bitrise та GitHub Actions

Ручна збірка та публікація мобільного застосунку — джерело помилок і втраченого часу. Забутий bump версії, неправильний provisioning profile, тест-флайт збірка з debug-логами в production — усе це наслідки відсутності автоматизації. Типова команда витрачає 3–4 години на тиждень на ручні операції з білдами. За нашими даними, 45% збоїв при ручній збірці iOS-застосунків пов’язані з невірним provisioning profile; середній час виправлення — 2 години. Автоматизація через Fastlane та match усуває цю проблему повністю.

Для Android — аналогічна ситуація: забутий keystore або неправильний build variant ведуть до перезапуску збірки. Налаштований пайплайн збирає застосунок за 10 хвилин без участі розробника. Середня економія часу — 8 годин на тиждень. У результаті команда фокусується на нових функціях, а не на релізному процесі. Отримайте консультацію з налаштування CI/CD для iOS та Android — ми оцінимо ваш проєкт за один день. Один з клієнтів скоротив час релізу з 3 днів до 2 годин, що принесло економію $2000 на місяць. Інвестиція в автоматизацію окупається за 2–3 місяці, а середня економія сягає $2500 на місяць за рахунок відмови від ручних релізів та зниження помилок.

Ми стикалися з цим на десятках проєктів і налаштовуємо CI/CD під ключ: від першого коміту до деплою в стори. Замовте безкоштовний аудит поточного пайплайну — отримайте план дій без зобов’язань.

Проблеми, які вирішуємо

  • Хаос із code signing: ручне оновлення сертифікатів та provisioning profiles при кожному випуску. match перетворює це на одноразове налаштування.
  • Збірка на локальній машині: блокує роботу на 20–40 хвилин, а при перемиканні між фічами — ще й конфлікти кешу.
  • Ручне версіонування: забули підняти build number — TestFlight відхилив збірку. Повторна збірка з правильним номером займає ще годину.
  • Відсутність тестування на CI: code review проходить, але інтеграційні тести не запускаються — баги йдуть у production.

Як Fastlane вирішує проблему code signing

Fastlane — де-факто стандарт для автоматизації збірок. Fastfile описує lanes — послідовності actions. Типова iOS-конфігурація:

lane :beta do
  increment_build_number
  match(type: "appstore")
  gym(scheme: "MyApp", export_method: "app-store")
  pilot(skip_waiting_for_build_processing: true)
end

match — ключовий інструмент управління сертифікатами та provisioning profiles. Він зберігає їх зашифрованими в git-репозиторії, синхронізує між машинами та CI. Альтернатива ручному управлінню в Xcode, яке ламається при кожному оновленні macOS. Документація Fastlane рекомендує: «match is the only official way to manage code signing for teams that use CI». Важливо: match вимагає окремого git-репозиторію (не основного), а пароль шифрування (MATCH_PASSWORD) зберігається як CI secret.

Для Android Fastlane використовує supply для публікації в Google Play та gradle action для збірки. Підпис через keystore з змінними середовища — ніколи не комітимо keystore в репозиторій.

Головний біль Fastlane: Ruby середовище. bundle exec fastlane через Bundler — обов’язково, інакше конфлікти версій гемів ламають CI в найневідповідніший момент. Ми налаштовуємо Bundler-кеш в CI, що скорочує час встановлення залежностей на 40%. Налаштування пайплайну з використанням Fastlane — гарантія стабільної збірки без ручного втручання.

GitHub Actions для мобілки

GitHub Actions підходить, якщо репозиторій уже на GitHub. Для iOS потрібен macOS runner — runs-on: macos-14 (Apple Silicon). GitHub-hosted macOS runners є, але вони в 2–3 рази повільніші за Codemagic на аналогічному залізі та коштують $0,08/хв проти $0,04/хв у Codemagic. Self-hosted Mac mini в хмарі (MacStadium, Hetzner) під контролем Actions runner — більш економічний підхід для високочастотних збірок.

Типовий workflow для iOS:

jobs:
  build:
    runs-on: macos-14
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
      - run: bundle exec fastlane beta
        env:
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.ASC_API_KEY }}

App Store Connect API Key замість Apple ID + пароля — обов’язково. Apple ID з 2FA не працює надійно на CI. API Key створюється в App Store Connect → Users and Access → Keys. Ми включаємо в роботу створення та ротацію цих ключів.

Для налаштування GitHub Actions під iOS виконайте кроки:

  1. Створіть YAML-файл в .github/workflows/
  2. Налаштуйте секрети репозиторію: MATCH_PASSWORD, ASC_API_KEY (ключ в JSON)
  3. Вкажіть runs-on: macos-14
  4. Використовуйте ruby/setup-ruby@v1 з bundler-cache: true
  5. Запустіть bundle exec fastlane beta

Як вибрати між Codemagic та Bitrise?

Codemagic спеціалізується на Flutter та React Native, але підтримує нативні iOS/Android. Killer feature — codemagic.yaml конфігурація та macOS M2 машини без додаткового налаштування. Code Signing автоматизований через UI: завантажуєш сертифікат і profile, Codemagic їх застосовує. Зручно для команд без DevOps. Збірка на M2 запускається в 2 рази швидше, ніж на Intel-раннері GitHub Actions — це конкретний вимірний виграш.

Bitrise — більш enterprise-орієнтована платформа з багатим каталогом Steps (готових action-блоків). Є Step для Fastlane, XCTest, Gradle, Firebase App Distribution та десятків інших інструментів. Workflow Editor з візуальним інтерфейсом знижує поріг входу. Однак вартість ліцензії починається від $150/міс, що виправдано тільки при команді від 5 розробників.

Платформа iOS runner Конфігурація Кращий сценарій Середній час збірки (iOS)
GitHub Actions macOS-hosted/self-hosted YAML Вже на GitHub, потрібна гнучкість 25–40 хв
Codemagic macOS M2 managed YAML / UI Flutter, швидкий старт 12–18 хв
Bitrise macOS managed Visual + YAML Велика команда, enterprise 15–25 хв
Fastlane (local) Будь-який macOS Fastfile (Ruby) Автоматизація локально + CI

Основні етапи налаштування CI/CD

Етап Тривалість Опис
Аналіз поточного процесу 2–4 години Ревізія коду, існуючих скриптів, схеми підпису
Налаштування Fastfile 1–2 дні Створення lanes для dev/staging/production з code signing та версіонуванням
Конфігурація CI-провайдера 1 день YAML/UI налаштування GitHub Actions, Codemagic або Bitrise, кешування
Тестування пайплайну 1–2 дні Прогін 3–5 повних циклів збірки та деплою, виправлення помилок
Документація та навчання 0.5 дня Опис процесу, передача команді, 2-годинний воркшоп

Distribution: TestFlight, Firebase App Distribution, Diawi

Для внутрішнього тестування iOS — TestFlight через pilot (Fastlane) або App Store Connect API. Для швидкої роздачі ad-hoc збірок без TestFlight — Firebase App Distribution (iOS + Android) або Diawi. Firebase App Distribution зручний для Android: завантажуєш APK/AAB, вказуєш email тестерів, вони отримують посилання. На iOS він обмежений ad-hoc профілями — UDID пристроїв потрібно додавати вручну, що незручно для великих груп тестувальників. Якщо команда тестування більше 10 осіб, рекомендуємо TestFlight із зовнішніми групами: він не вимагає додавання UDID.

Як налаштувати версіонування без помилок?

Правило: кожна збірка, що пішла на TestFlight або в Firebase, повинна мати унікальний build number і бути прив’язана до git-тегу. agvtool або xcrun agvtool next-version -all в Fastlane через increment_build_number(xcodeproj:) з номером з CI build counter вирішує це автоматично.

Чек-лист типових помилок при налаштуванні версіонування:

  • Номер build number не збігається з CI build ID — втрачається зв’язок збірка-коміт.
  • Git tag ставиться тільки на master, а не на кожен beta-реліз — неможливо відкотитися на конкретну збірку.
  • Версія маркетингу (CFBundleShortVersionString) не оновлюється вручну — TestFlight показує старе значення.

Що входить в роботу

Ми налаштовуємо CI/CD під ключ з гарантією працездатності. У результаті ви отримуєте:

  • Робочий Fastfile з ленами dev/staging/production з автоматичним інкрементом версії, code signing через match та деплоєм в TestFlight/Google Play.
  • Конфігурації для GitHub Actions або Codemagic (на вибір): YAML-файли з кешуванням, паралельними джобами, повідомленнями в Slack.
  • App Store Connect API Key та налаштування push-повідомлень (APNs/FCM).
  • Документацію з запуску збірок та оновлення сертифікатів.
  • Навчання команди: 2 години онлайн-воркшопу по роботі з пайплайном.
  • Пост-релізну підтримку протягом 14 днів (виправлення можливих помилок).

Чому варто довірити налаштування нам?

Ми — команда мобільних розробників з 5+ роками досвіду в CI/CD. За цей час реалізували 50+ проєктів для iOS, Android та кроссплатформи. Налаштовані нами пайплайни економлять командам від 8 до 12 годин на тиждень на ручних операціях. Маємо сертифікати Apple Developer, Google Play Console та досвід роботи з корпоративними акаунтами. Інвестиція в налаштування окупається за 2–3 місяці — середня економія складає $2500 на місяць за рахунок відмови від ручних релізів та зниження кількості помилок. Ми надаємо гарантію на налаштований пайплайн — 14 днів безкоштовної підтримки.

Терміни та вартість

Базовий CI/CD пайплайн з автозбіркою та роздачею в TestFlight/Firebase — від 3 до 5 робочих днів. Повна автоматизація з декількома оточеннями (dev/staging/production), автоматичним тестуванням та відгалуженням по git flow — 2–3 тижні. Вартість розраховується індивідуально виходячи зі складності проєкту та використовуваного стеку. Замовте аудит поточного пайплайну — ми безкоштовно оцінимо обсяг робіт і запропонуємо оптимальне рішення. Отримайте консультацію — зв’яжіться з нами.

Wikipedia-стаття «CI/CD» та офіційна документація Fastlane.