Управление code signing в iOS: настройка Fastlane Match для команды и CI

Быстрая настройка code signing для iOS команды Сертификаты iOS — источник половины CI-инцидентов в мобильных командах. Разработчик уволился и унёс Distribution Certificate, созданный только на его машине. Или сертификат истёк в пятницу вечером перед релизом. В CI `No matching provisioning profile

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

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

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Управление code signing в iOS: настройка Fastlane Match для команды и CI
Средний
от 1 дня до 3 дней

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • 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

Быстрая настройка code signing для iOS команды

Сертификаты iOS — источник половины CI-инцидентов в мобильных командах. Разработчик уволился и унёс Distribution Certificate, созданный только на его машине. Или сертификат истёк в пятницу вечером перед релизом. В CI No matching provisioning profiles found — и никто не понимает, почему локально собирается, а в пайплайне нет. По нашей статистике, 80% сбоев CI в iOS-проектах связаны с code signing, а среднее время решения инцидента — 4 часа. Для команды из 5 разработчиков это 20 часов в месяц, что эквивалентно 10% фонда оплаты труда. Мы настраиваем 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 минут.

Первоначальная настройка

# Инициализация 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 снижает количество ошибок подписи на 70%.

Что входит в настройку Fastlane Match?

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

Процесс внедрения

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

Общий срок — от 1 до 3 дней в зависимости от количества targets и сложности CI-пайплайна.

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