Швидке налаштування автоматичного підпису кодом для 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:
- Клонує репозиторій
- Розшифровує файли паролем (
MATCH_PASSWORD) - Імпортує сертифікат у тимчасовий keychain
- Встановлює 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-конфігурацію. Замовте консультацію, і ми запропонуємо оптимальне рішення для вашого проєкту.







