Мы настраиваем подпись iOS-приложений под ключ: от генерации сертификатов до интеграции в CI/CD. За 1–2 дня вы получаете полностью рабочую конфигурацию, которая не ломается при смене устройств или обновлении профилей. Пишите — оценим ваш проект бесплатно.
Ошибка No signing certificate found — следствие одной из трёх причин: истёкший сертификат, несоответствие Bundle ID или отсутствие профиля на CI. В 80% случаев проблема решается за 30 минут, если знать, куда смотреть. Например, мы недавно разобрали кейс, где команда из 10 человек теряла по 2 часа в неделю на ручное пересоздание профилей — после внедрения Fastlane match ошибки исчезли на 90%.
Как избежать ошибки 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 |
Полный процесс настройки
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).
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 лет. Успешно настроили CI/CD пайплайны для 20+ проектов с командами от 5 до 50 разработчиков. В среднем, миграция с ручного управления на автоматизированное занимает 1–2 дня, после чего ошибки подписи исчезают полностью.
Типичные ошибки
- Скачать Provisioning Profile вручную и положить в
~/Library/MobileDevice/Provisioning Profiles— работает локально, ломается на CI и у других разработчиков. - Забыть обновить профиль после добавления нового устройства в Portal (для Development).
- Один сертификат на всю команду вместо Certificate per developer — при отзыве одного сертификата сборки у всех падают.
- Использовать development-профиль в production-сборке (Xcode не пустит, но путаница в настройках частa).
Ориентиры по срокам
Разовая настройка подписи для одного таргета — 2–4 часа. При наличии нескольких Extensions, App Groups и настройки CI/CD через Fastlane match — 1–2 дня. Полная миграция существующего проекта с ручного управления на автоматизированное — до 3 дней, включая обучение команды.







