Provisioning-профиль — одна из самых непонятных частей Apple Developer для новичков, но именно он связывает воедино приложение, сертификат и устройства для тестирования. Разбираем, как создать профиль правильно и почему он «слетает» после каждого изменения настроек.
Что такое provisioning-профиль
Это файл, который объединяет App ID, сертификат разработчика и список разрешённых устройств (для Development) или тип распространения (для Distribution). Без правильного профиля Xcode не даст собрать и запустить приложение.
Типы provisioning-профилей
- Development — для тестирования на подключённых устройствах
- Ad Hoc — для распространения ограниченному кругу тестировщиков без TestFlight
- App Store — для публикации через App Store Connect
- Enterprise — для внутренней дистрибуции в компании
Как создать provisioning-профиль
- В разделе Profiles нажмите «+» и выберите тип профиля.
- Укажите App ID приложения, для которого создаётся профиль.
- Выберите сертификат — Development или Distribution, в зависимости от типа профиля.
- Для Development-профиля отметьте устройства, на которых будет тестироваться приложение.
- Скачайте профиль и подключите его в Xcode через Signing & Capabilities.
Automatic vs Manual: когда переключаться на ручное управление
Режим Automatically manage signing удобен для одиночной разработки, но в командах с несколькими Distribution-сертификатами начинает создавать путаницу — Xcode может внезапно перевыпустить профиль без явного уведомления. В таких случаях стоит перейти на ручное управление и явно закрепить конкретный профиль за конкретной конфигурацией сборки.
Provisioning-профиль и CI/CD: особенности автоматизации
Для автоматической сборки на выделенном сервере (CI/CD) provisioning-профили обычно хранят не в связке ключей интерактивного пользователя, а экспортируют в защищённое хранилище секретов сборочной системы — GitHub Actions, Bitrise, Xcode Cloud. Профиль и сертификат передаются в зашифрованном виде и подключаются автоматически на этапе сборки без участия человека.
Что делать при ошибке «No matching provisioning profiles found»
- Проверьте, что App ID в профиле точно совпадает с bundle identifier проекта.
- Убедитесь, что выбранный сертификат ещё действителен и присутствует в связке ключей.
- Для Development-профиля проверьте, что тестовое устройство добавлено в список разрешённых.
- При автоматическом управлении подписью попробуйте переключить Team и выбрать его заново — это форсирует пересоздание профиля.
FAQ
Почему профиль стал «Invalid» после обновления Xcode?
Часто дело в истёкшем сертификате или изменившихся Capabilities приложения — профиль нужно пересоздать.
Нужно ли пересоздавать профиль при добавлении нового устройства?
Да, для Development-профиля новое устройство нужно сначала зарегистрировать, а затем обновить сам профиль.
Сколько устройств можно добавить в один профиль?
Ограничение задаётся общим лимитом устройств на аккаунт — обычно до 100 устройств каждого типа в год.
Можно ли использовать один provisioning-профиль для нескольких приложений?
Нет, каждый профиль привязан к конкретному App ID и не может использоваться для другого приложения.
Нужно ли пересоздавать профиль при обновлении macOS или Xcode?
Обычно нет, если срок действия сертификата и профиля не истёк — обновление системы само по себе не аннулирует существующие профили.
Provisioning-профиль и App Groups
Если приложение использует App Groups для обмена данными между основным приложением и расширениями (виджетами, action extensions), это тоже отражается в provisioning-профиле — каждый target (основное приложение и каждое расширение) требует собственного App ID и профиля с одинаковым App Group идентификатором.
Просмотр содержимого профиля вручную
Опытные разработчики иногда открывают .mobileprovision файл через терминал командой security cms -D -i, чтобы увидеть его содержимое в виде читаемого XML — это полезно для диагностики, когда непонятно, почему именно Xcode считает профиль недействительным.
Provisioning-профиль для watchOS-приложений
Приложения под Apple Watch требуют отдельного App ID и, соответственно, отдельного provisioning-профиля даже если watchOS-приложение поставляется в комплекте с основным iOS-приложением — это частая причина путаницы у разработчиков, впервые добавляющих поддержку часов.
Просмотр списка всех активных профилей аккаунта
Полный список provisioning-профилей, включая устаревшие, доступен в разделе Profiles на developer.apple.com — периодическая чистка неиспользуемых профилей помогает не запутаться, особенно если над аккаунтом работало несколько разработчиков за долгое время.
Provisioning-профиль в открытых pull request на GitHub
Никогда не коммитьте файлы .mobileprovision или .p12 в открытые репозитории — даже без приватного ключа профиль раскрывает Team ID и структуру App ID вашего проекта, что нежелательно для публичного кода.
Итог
Provisioning-профиль — это не разовая настройка, а элемент, который нужно обновлять при каждом значимом изменении проекта. Больше о полном цикле подготовки приложения — в статье «Apple Developer Apps: гид для разработчиков».
