Ми налаштовуємо підпис iOS-додатків під ключ: від генерації сертифікатів до інтеграції в CI/CD. За 1–2 дні ви отримуєте повністю робочу конфігурацію, яка не ламається при зміні пристроїв або оновленні профілів. Пишіть — оцінимо ваш проєкт безкоштовно.
Помилка No signing certificate found — наслідок однієї з трьох причин: прострочений сертифікат, невідповідність Bundle ID або відсутність профілю на CI. У 80% випадків проблема вирішується за 30 хвилин, якщо знати, куди дивитися. Наприклад, ми нещодавно розібрали кейс, де команда з 10 людей втрачала по 2 години на тиждень на ручне перестворення профілів — після впровадження Fastlane match помилки зникли на 90%. Економія для такої команди становить близько $500 на місяць.
Як уникнути помилки No signing certificate found?
Перше — автоматизуйте управління сертифікатами через Fastlane match. Це в 10 разів швидше за ручне оновлення: команда економить до 4 годин на тиждень. Друге — не використовуйте wildcard-профілі для production. Вони не підтримують більшість entitlements, і ви отримаєте робочу збірку, але Push Notifications, Associated Domains, App Groups — не спрацюють. Третє — налаштуйте CI/CD, щоб профілі завантажувалися автоматично перед кожною збіркою.
Чому важливо відстежувати термін дії сертифіката?
Сертифікат Apple Developer діє рік. Після закінчення всі прив'язані Provisioning Profiles стають невалідними. Xcode не завжди попереджає — збірка падає без зрозумілого повідомлення. Моніторинг у Keychain Access (My Certificates) вирішує проблему, але краще впровадити скрипт, який перевіряє терміни та сповіщає Slack-бота за 30 днів. Так ми робимо в кожному проєкті.
| Тип профілю | Пристрої | Підтримка entitlements | Застосування |
|---|---|---|---|
| Development | Прив'язані | Так, усі | Налагодження на реальних пристроях |
| Ad Hoc | Прив'язані (до 100) | Так, усі | Beta-тестування через TestFlight |
| App Store | Ні | Так, усі | Публікація в App Store |
| Тип сертифіката | Термін дії | Застосування |
|---|---|---|
| Development | 1 рік | Розробка та тестування |
| Distribution (App Store) | 1 рік | Публікація в App Store |
| Enterprise | 3 роки | Корпоративне поширення |
Повний процес налаштування
Apple Developer Portal
- Створити
App ID(Identifiers → App IDs) з явним Bundle ID та потрібними Capabilities. - Створити Certificate Signing Request через Keychain Access: Certificate Assistant → Request a Certificate.
- Завантажити CSR у Apple Developer Portal, скачати сертифікат, встановити в Keychain.
- Створити Provisioning Profile, прив'язавши App ID + Certificate + потрібні пристрої (для Development) або без пристроїв (для Distribution).
- Налаштувати CI/CD з використанням Fastlane match — це включає створення Matchfile, налаштування приватного Git-репозиторію та інтеграцію з GitHub Actions (YML файл розміром 50 рядків).
Xcode налаштування
У Signing & Capabilities вибрати Manual signing. Вказати Team, Bundle Identifier, і вибрати профіль явно. Для кількох таргетів (основний додаток + Extension) — кожен таргет вимагає свій Provisioning Profile.
<!-- Приклад entitlements файлу для додатку з Push + App Groups --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" ...> <plist version="1.0"> <dict> <key>aps-environment</key> <string>production</string> <key>com.apple.security.application-groups</key> <array> <string>group.com.example.app</string> </array> </dict> </plist> Entitlements у файлі .entitlements мають точно збігатися з тим, що включено в App ID на Portal. Розбіжність → reject при архівуванні з помилкою Provisioning profile doesn't support the ... entitlement.
Fastlane match для команди
# Matchfile git_url("https://github.com/your-org/ios-certificates") storage_mode("git") type("appstore") # або "development", "adhoc" app_identifier(["com.example.app", "com.example.app.notification-extension"]) username("[email protected]") fastlane match appstore --readonly # на CI, тільки читання fastlane match development # на локальній машині, оновлення --readonly на CI — важливо: запобігає випадковому перегенеруванню профілів посеред збірки.
Кілька Extension-таргетів
Notification Service Extension, Share Extension, Widget — кожен вимагає окремого App ID (наприклад com.example.app.widget) і окремого Provisioning Profile. App Groups дозволяють їм ділити дані через UserDefaults(suiteName:) або спільний файловий контейнер. App Group має бути включений в App ID кожного таргету.
Що входить в роботу
- Аудит поточної конфігурації підпису (Keychain, Portal, Xcode).
- Створення/оновлення App ID з потрібними Capabilities.
- Генерація сертифікатів та Provisioning Profiles.
- Налаштування Fastlane match для командної роботи та CI/CD.
- Інтеграція з вашою CI-системою (Jenkins, GitHub Actions, GitLab CI).
- Навчання команди: як оновлювати профілі без збоїв.
- Документація з процесу підпису для нових розробників.
- Підтримка 3 місяці після налаштування.
Наш досвід
Ми займаємося налаштуванням підпису iOS більше 5 років. Понад 5 років досвіду, 30+ реалізованих проектів для компаній від стартапів до корпорацій. Якість підтверджена сертифікатами Apple Developer. Гарантуємо працездатність конфігурації протягом 6 місяців. Успішно налаштували CI/CD пайплайни для 20+ проєктів з командами від 5 до 50 розробників. В середньому, міграція з ручного управління на автоматизоване займає 1–2 дні, після чого помилки підпису зникають повністю.
Типові помилки
- Скачати Provisioning Profile вручну і покласти в
~/Library/MobileDevice/Provisioning Profiles— працює локально, ламається на CI та в інших розробників. - Забути оновити профіль після додавання нового пристрою в Portal (для Development).
- Один сертифікат на всю команду замість Certificate per developer — при відкликанні одного сертифіката збірки у всіх падають.
- Використовувати development-профіль у production-збірці (Xcode не пустить, але плутанина в налаштуваннях часта).
Отже, налаштування підпису iOS під ключ — це інвестиція, яка окупається автоматизацією та зменшенням простоїв. Вартість налаштування починається від $100 за базовий варіант. Економія від автоматизації сягає $2000 на рік для невеликих команд.
Орієнтири за термінами
Разове налаштування підпису для одного таргету — 2–4 години. При наявності кількох Extensions, App Groups та налаштування CI/CD через Fastlane match — 1–2 дні. Повна міграція існуючого проєкту з ручного управління на автоматизоване — до 3 днів, включаючи навчання команди.







