Match (Fastlane) — это инструмент для управления Code Signing сертификатами и Provisioning Profiles iOS, который хранит их в зашифрованном Git-репозитории. В отличие от ручного управления через Apple Developer Portal, Match автоматизирует синхронизацию подписей между всеми разработчиками и CI/CD системами. По данным официальной документации Fastlane (2026), Match устраняет до 90% ошибок, связанных с неверными сертификатами при сборке iOS-приложений.
Главное
Match (Fastlane) — это компонент экосистемы Fastlane, предназначенный для централизованного управления Code Signing сертификатами и Provisioning Profiles для iOS-разработки. Он решает проблему синхронизации подписей между участниками команды и автоматизирует настройку сертификатов в CI/CD пайплайнах без участия разработчика.
Без Match каждый участник команды вручную генерирует сертификаты через Xcode или Apple Developer Portal, что приводит к конфликтам при сборке на разных машинах. Code Signing — это процесс цифровой подписи iOS-приложения, который подтверждает его авторство и целостность перед установкой на устройство пользователя.
По данным Apple Developer Documentation (2025), неверная настройка сертификатов — одна из самых частых причин отказа при отправке приложения в App Store. Match автоматически проверяет валидность сертификатов и предупреждает об истекающих сроках действия, что снижает риск отклонения сборки на этапе верификации Apple.
Используйте Match в любом проекте с двумя и более разработчиками или при наличии CI/CD пайплайна — это сократит время на настройку окружения нового участника команды с 30 минут до одной команды в терминале.
Архитектура Match построена на концепции единого источника истины для всех сертификатов iOS-команды. Вместо локального хранения в связке ключей каждого разработчика Match объединяет сертификаты в одном Git-репозитории с шифрованием каждого файла перед сохранением.
Процесс состоит из трёх этапов. На этапе инициализации Match генерирует все необходимые сертификаты и профили через Apple Developer Portal API. Каждый файл шифруется алгоритмом AES-256 с ключом, который формируется на основе пользовательской парольной фразы. Зашифрованные файлы сохраняются в Git-репозиторий и синхронизируются с удалённым сервером через стандартные Git-операции push и pull.
Match использует комбинацию OpenSSL и пользовательской парольной фразы для шифрования сертификатов и профилей. Ключ доступа задаётся через переменную окружения MATCH_PASSWORD и не хранится в репозитории, что исключает утечку даже при компрометации Git-сервера или публичном доступе к репозиторию.
При запросе сертификата Match загружает зашифрованный файл из репозитория, расшифровывает его локально с использованием парольной фразы и устанавливает в Keychain текущей машины. После завершения сборки сертификаты могут быть удалены из Keychain для соблюдения политик безопасности корпоративного окружения — это предотвращает использование устаревших сертификатов в следующих сборках.
Каждый сертификат сохраняется с именем, содержащим идентификатор приложения, тип профиля и дату создания. Такая структура позволяет Match управлять версиями сертификатов и при необходимости откатывать изменения до предыдущего состояния через стандартные Git-команды revert и reset. Это особенно полезно при случайном удалении или перезаписи профиля.
Установка Match выполняется вместе с Fastlane через менеджер пакетов Ruby: gem install fastlane. После установки необходимо инициализировать хранилище сертификатов командой fastlane match init, которая создаёт пустой Git-репозиторий и генерирует файл Matchfile с шаблоном базовых настроек.
# Инициализация репозитория Match
fastlane match init
Файл Matchfile содержит все параметры подключения к хранилищу сертификатов: URL Git-репозитория, тип профилей по умолчанию, идентификаторы приложений и учётные данные Apple Developer. Пример типичной конфигурации для команды из пяти разработчиков:
# Matchfile configuration
git_url("https://github.com/company/certificates.git")
type(:development)
app_identifier(["com.company.app", "com.company.app.extension"])
username("developer@company.com")
team_id("TEAM123456")
git_branch("main")
Параметр type определяет тип профилей: :development для отладки на устройствах разработчиков, :appstore для публикации в App Store, :adhoc для тестирования на внешних устройствах и :enterprise для корпоративного распространения In-House вне App Store. Каждый тип создаёт отдельную директорию в репозитории, что позволяет организовать профили по целевым сценариям сборки.
Match поддерживает несколько способов аутентификации в Apple Developer Portal: двухфакторная аутентификация через Apple ID, App-Specific Password и API-ключи App Store Connect API. Для CI/CD рекомендуется использовать API-ключи — они не требуют интерактивного ввода кода подтверждения и не блокируют автоматические сборки при смене устройства разработчика.
После настройки Matchfile выполняется команда fastlane match development или fastlane match appstore для генерации и синхронизации профилей. Match автоматически создаёт или обновляет сертификаты через Apple Developer Portal API и сохраняет их в репозиторий. Apple Developer Portal — это веб-интерфейс Apple для управления сертификатами, идентификаторами приложений и списком разрешённых устройств разработчиков.
При первом запуске Match запросит парольную фразу для шифрования репозитория. Эта фраза должна быть сохранена в менеджере секретов CI/CD (GitHub Actions Secrets, GitLab CI Variables или Jenkins Credentials) и передана через переменную окружения MATCH_PASSWORD. Без неё Match не сможет расшифровать сертификаты на других машинах или в CI-окружении.
Интерфейс Match состоит из набора команд для создания, обновления, синхронизации и удаления сертификатов и профилей. Каждая команда соответствует определённому действию в жизненном цикле Code Signing: от генерации до полной очистки репозитория.
Команда fastlane match development загружает или создаёт Development-сертификаты и профили для отладки на локальных устройствах. Provisioning Profile — это цифровой документ Apple, который связывает сертификат разработчика с идентификатором приложения и списком разрешённых для установки устройств.
Для публикации в App Store используется fastlane match appstore — она генерирует Distribution-сертификаты и AppStore-профили. Команда fastlane match adhoc создаёт профили для тестирования на внешних устройствах, а fastlane match enterprise — для корпоративных приложений In-House.
# Создание Development профилей для отладки
fastlane match development
# Создание AppStore профилей для релиза
fastlane match appstore
# Импорт существующих вручную сертификатов
fastlane match import
Команда fastlane match import позволяет добавить в репозиторий уже существующие сертификаты — полезно при миграции с ручного управления на Match. Параметр --readonly блокирует любые изменения в репозитории, что критично для CI-среды, где пайплайн не должен создавать или удалять сертификаты и профили автоматически.
| Команда Match | Назначение | Тип профиля |
|---|---|---|
| match development | Создание Development профилей для отладки на устройствах | Development |
| match appstore | Создание профилей для публикации в App Store | AppStore |
| match adhoc | Профили для внешнего тестирования на устройствах бета-тестеров | AdHoc |
| match enterprise | Корпоративные профили для In-House распространения | Enterprise |
| match import | Импорт ранее созданных сертификатов в репозиторий | Любой |
Для полной очистки репозитория используется команда fastlane match nuke. Она удаляет все сертификаты из Git-хранилища, из Apple Developer Portal и с локальной машины — это полный сброс состояния Code Signing для проекта. Команда применяется только при критических конфликтах или при переезде на новый аккаунт Apple Developer.
CI/CD интеграция Match — одно из ключевых преимуществ инструмента. В пайплайне GitHub Actions, GitLab CI, Bitrise или Jenkins Match автоматически загружает и устанавливает правильные сертификаты без участия разработчика. Это позволяет реализовать полностью автоматизированную сборку и подпись iOS-приложения от коммита до готового IPA.
Типичная конфигурация для GitHub Actions включает установку Fastlane, настройку переменной MATCH_PASSWORD и запуск Match с флагом --readonly. GitHub Actions — это платформа CI/CD от GitHub, которая автоматизирует сборку, тестирование и публикацию кода на основе событий в репозитории.
# Установка Fastlane в CI-окружении
gem install fastlane --no-document
# Запуск Match в read-only режиме без права изменений
fastlane match development --readonly
Перед запуском Match в CI необходимо настроить доступ к репозиторию сертификатов. Fastlane автоматически клонирует его на основе параметра git_url из Matchfile. Доступ к репозиторию настраивается через SSH-ключ или personal access token, которые добавляются в секреты CI-системы — это гарантирует, что сертификаты не будут скомпрометированы через открытый доступ.
Настройте переменные окружения MATCH_PASSWORD и FASTLANE_APPLE_API_KEY в секретах вашего CI-провайдера. API-ключ App Store Connect позволяет Match аутентифицироваться в Apple Developer Portal без двухфакторной аутентификации, что исключает интерактивные запросы в автоматических сборках и предотвращает блокировку пайплайна.
Даже при правильной настройке Match могут возникать ошибки, связанные с истечением сертификатов, конфликтами профилей или неверной конфигурацией окружения. Диагностика проблем Match строится на анализе логов команды и проверке состояния Git-репозитория сертификатов на актуальность.
Самая частая ошибка — «You need to provide a password for Match» — возникает, когда переменная окружения MATCH_PASSWORD не установлена на машине или в CI-окружении. Решение: добавить MATCH_PASSWORD в переменные окружения системы или передать пароль через параметр --keychain_password при запуске команды Match.
Вторая по частоте проблема — конфликт сертификатов при добавлении нового устройства в AdHoc профиль. Решается командой fastlane match adhoc --force, которая пересоздаёт профили с учётом новых устройств. Apple Developer сертификаты действуют один год, после чего сборка с их использованием отклоняется App Store Connect. Match предупреждает об истечении за 30 дней до окончания срока.
При ошибке «Multiple matches found for...» в репозитории присутствует несколько версий одного сертификата. Используйте команду fastlane match nuke для полной очистки репозитория и удаления всех сертификатов из Apple Developer Portal. После очистки выполните генерацию с нуля — это гарантирует консистентное состояние профилей без дубликатов и конфликтующих версий.
Часто задаваемые вопросы
Match использует OpenSSL с алгоритмом AES-256-CBC для шифрования каждого файла сертификата перед сохранением в Git. Ключ шифрования формируется на основе парольной фразы MATCH_PASSWORD. Даже при публичном доступе к репозиторию сертификаты остаются недоступными без знания пароля.
Нет, Match требует Git-репозиторий для хранения зашифрованных сертификатов. Однако репозиторий может быть локальным, если синхронизация между машинами не требуется. В этом случае в параметре git_url указывается локальный путь к директории на файловой системе вместо URL удалённого репозитория.
Конфликты возникают, когда два разработчика одновременно генерируют разные сертификаты. Решение — использовать команду fastlane match nuke для полной очистки всех сертификатов в репозитории и в Apple Developer Portal. После очистки один разработчик выполняет генерацию с нуля и синхронизирует через Git.
Match автоматически определяет истёкшие сертификаты при запуске и предлагает их заменить. Для принудительного обновления выполните fastlane match [type] --force — команда пересоздаёт сертификаты и профили указанного типа, даже если существующие ещё действительны, что полезно при смене команды разработчиков.
Ручное управление требует генерации сертификатов через Xcode или Developer Portal для каждой машины отдельно. Match централизует хранение, шифрует данные, синхронизирует их между разработчиками и CI/CD, а также автоматически проверяет валидность и сроки действия всех подписей без участия человека.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также