Provisioning Profile: что это, какие бывают типы и как работает

Автор: IT Sectr Опубликовано: 2026-04-16 Время чтения: 10 мин

Provisioning Profile связывает сертификаты разработчика, идентификатор приложения и список разрешённых устройств для подписи кода iOS-приложений. По данным Apple Developer Documentation, 2026, профиль необходим для любого запуска приложения на физическом устройстве — без него Xcode не сможет установить билд на iPhone или iPad. В статье разберём структуру, типы и процесс создания профилей.

Главное

  • Provisioning Profile — конфигурационный файл Apple, объединяющий сертификат, App ID и устройства для подписи кода
  • Development профиль используется для тестирования на физических устройствах во время разработки
  • Distribution профиль делится на App Store, Ad Hoc и Enterprise для разных сценариев публикации
  • App ID уникально идентифицирует приложение в экосистеме Apple и привязан к Bundle Identifier
  • Entitlements определяют доступ приложения к системным функциям: Push-уведомлениям, iCloud, App Groups

Что такое Provisioning Profile

Provisioning Profile — это цифровой конфигурационный файл формата .mobileprovision (для iOS) или .provisionprofile (для macOS), который Apple использует для контроля установки и запуска приложений на устройствах. Профиль содержит метаданные подписи кода, без которых приложение невозможно запустить на физическом iPhone, iPad или Apple Watch — симулятор не требует профиля, так как код не подписывается для выполнения на реальном процессоре.

Профиль выпускается через Apple Developer Portal и имеет срок действия — обычно один год для Development и Distribution профилей. Согласно политике Apple, профиль автоматически связывается с сертификатом Apple Developer Program, под которым он подписан: если сертификат отозван или истёк, профиль перестаёт работать.

Каждый профиль содержит уникальный UUID, который Xcode использует для идентификации профиля в связке ключей. Xcode автоматически выбирает подходящий профиль при сборке, но разработчик может переопределить выбор в настройках Signing & Capabilities. На одном устройстве может быть установлено неограниченное количество профилей — система управления устройствами Apple (MDM) использует это для корпоративного распространения приложений.

Зачем нужен Provisioning Profile

Подпись кода — основная причина существования профилей. Apple требует, чтобы каждое приложение, запускаемое на устройстве с iOS, было подписано сертификатом, выпущенным Apple. Provisioning Profile выступает связующим звеном: он подтверждает, что разработчик имеет право запускать приложение на данном устройстве. По данным Apple Security Guide (2025), механизм профилей предотвращает установку вредоносного ПО на устройства пользователей даже в случае компрометации сертификата разработчика.

Профиль также определяет, какие системные сервисы доступны приложению. Если приложение использует Push-уведомления, Apple Push Notification service (APNs) требует корректного entitlements внутри профиля. Без этого серверные уведомления не будут доставлены на устройство. Аналогичное правило действует для iCloud, App Groups, Wallet, HealthKit и других фреймворков Apple.

Отличие от сертификата

Разработчики часто путают Provisioning Profile и Apple Certificate. Сертификат — это цифровой документ, подтверждающий личность (кто подписывает), а профиль — это конфигурация (какое приложение, на каких устройствах, с какими правами). Один сертификат может использоваться в нескольких профилях, и один профиль привязан ровно к одному сертификату. Apple рекомендует создавать отдельный профиль для каждого приложения и каждого сценария — Development, Ad Hoc, App Store.

Как работает Provisioning Profile

Процесс подписи приложения состоит из нескольких шагов, выполняемых последовательно. Xcode берёт бинарный файл приложения (App Bundle), подписывает его закрытым ключом разработчика, встраивает в него Provisioning Profile и отправляет на устройство. Устройство проверяет подпись публичным ключом Apple, сверяет UUID профиля со списком доверенных профилей в системе и запускает приложение только в случае успеха всех проверок.

Когда пользователь загружает приложение из App Store, механизм отличается. App Store Connect переподписывает приложение собственным Distribution сертификатом Apple, заменяя профиль разработчика на Store-профиль. Это означает, что приложение, опубликованное через App Store, технически подписано Apple, а не разработчиком — хотя изначальная подпись разработчика проверяется на этапе загрузки билда в App Store Connect.

Для Ad Hoc распространения профиль регистрирует конкретные UDID устройств, на которых разрешён запуск. Apple Developer Program бесплатного аккаунта ограничивает 100 устройств в год для тестирования. Enterprise профили (для внутреннего распространения в организации) не имеют ограничения по устройствам, но требуют активной подписки Apple Developer Enterprise Program стоимостью $299 в год.

Жизненный цикл профиля

Срок действия Provisioning Profile составляет один год с момента создания. За 30 дней до истечения Apple начинает отправлять push-уведомления разработчику через Xcode и Developer Portal. Если профиль истёк, приложение на устройстве продолжает работать (если уже установлено), но новый билд с этим профилем установить не удастся. Xcode при попытке сборки с истёкшим профилем выдаёт ошибку code signing с кодом -402620394. Apple рекомендует настроить автоматическое продление профилей через Xcode Accounts Preferences — тогда Xcode обновляет профиль за 24 часа до истечения.

Типы Provisioning Profile

Apple предоставляет четыре основных типа Provisioning Profile, каждый из которых предназначен для конкретного этапа жизненного цикла приложения. Development профиль позволяет запускать приложение на физических устройствах, добавленных в Apple Developer Portal, и используется на этапе разработки и QA-тестирования. Для создания Development профиля достаточно бесплатного аккаунта разработчика Apple.

Ad Hoc профиль предназначен для распространения приложения среди ограниченного круга тестировщиков без использования App Store. Профиль регистрирует до 100 устройств по UDID, и приложение может быть установлено напрямую через iTunes, Apple Configurator или MDM-решения. Ad Hoc сборки имеют срок действия 12 месяцев и не требуют прохождения ревью Apple.

App Store профиль используется исключительно для публикации приложения в App Store и не содержит списка устройств — Apple сама управляет распространением после одобрения билда. При загрузке архива в App Store Connect Xcode автоматически использует App Store профиль, если он установлен в системе. Enterprise профиль предназначен для организаций с Apple Developer Enterprise Program и позволяет распространять приложения внутри компании без ограничения по количеству устройств и без ревью Apple.

Тип профиляЦельУстройстваСтоимость подписки
DevelopmentРазработка и тестированиеДо 100 UDIDБесплатно / $99 в год
Ad HocРаспространение тестировщикамДо 100 UDID$99 в год
App StoreПубликация в App StoreЛюбые (через Apple)$99 в год
EnterpriseВнутреннее распространениеНеограниченно$299 в год

Структура Provisioning Profile

Provisioning Profile представляет собой файл в DER-формате, подписанный Apple, содержимое которого можно просмотреть через командную строку. Security framework macOS позволяет декодировать .mobileprovision в читаемый XML-плеист. Внутри профиля содержатся: UUID профиля, App ID (префикс команды + Bundle Identifier), список сертификатов, список разрешённых устройств (только для Development и Ad Hoc), entitlements и срок действия.

App ID — уникальный идентификатор приложения, состоящий из Team ID (10 символов, присваивается Apple) и Bundle Identifier (например, com.example.myapp). App ID может быть explicit (точное совпадение с Bundle Identifier) или wildcard (шаблон *.example.com для нескольких приложений). Apple не рекомендует использовать wildcard для приложений, использующих Push-уведомления или iCloud — эти сервисы требуют explicit App ID.

Entitlements — XML-блок внутри профиля, который определяет права доступа приложения к системным ресурсам. Типичные entitlements включают: aps-environment (Push-уведомления), com.apple.developer.icloud-services (iCloud), com.apple.security.application-groups (App Groups для Widget и Share Extension). Apple автоматически добавляет entitlements в профиль на основе включённых Capabilities в Xcode. Любое несоответствие между entitlements в профиле и запрашиваемыми в коде приводит к ошибке подписи.

Создание Provisioning Profile в Apple Developer

Создание профиля возможно двумя способами: через веб-интерфейс Apple Developer Portal или автоматически через Xcode. Для типового проекта Xcode управляет профилями автоматически при включённой опции Automatically manage signing. Xcode создаёт сертификат, профиль и App ID за несколько секунд, синхронизируясь с Apple Developer Portal. Однако для CI/CD-пайплайнов требуется ручное управление.

Для ручного создания профиля в Apple Developer Portal необходимо: перейти в раздел Certificates, Identifiers & Profiles, выбрать Profiles и нажать "+". Затем выбрать тип профиля (Development, Ad Hoc, App Store или Enterprise), выбрать App ID из списка зарегистрированных, выбрать сертификат разработчика и (для Development и Ad Hoc) выбрать устройства. После создания профиль скачивается в формате .mobileprovision и устанавливается двойным кликом в Xcode.

CI/CD серверы требуют особого подхода: профиль и сертификат должны храниться в защищённом репозитории (например, в секретах GitHub Actions). При сборке профиль загружается на агент, помещается в папку ~/Library/MobileDevice/Provisioning Profiles, а сертификат импортируется в связку ключей. Fastlane — популярный инструмент для автоматизации подписи — предоставляет команду match, которая синхронизирует профили и сертификаты между разработчиками через зашифрованный git-репозиторий.

Пример: проверка профиля через командную строку

Для диагностики проблем с подписью кода можно декодировать .mobileprovision и проверить его содержимое. Команда ниже извлекает XML-плеист из профиля и сохраняет в читаемый формат:

bash
# Декодирование .mobileprovision в XML
security cms -D -i "path/to/embedded.mobileprovision" \
  -o "profile.plist"

# Проверка срока действия профиля
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist

Security утилита из состава macOS Command Line Tools декодирует CMS-подписанный файл профиля. Флаг -D означает декодирование, -i — входной файл. После декодирования утилита plist конвертирует бинарный plist в XML, а grep извлекает дату истечения. Этот метод полезен в CI/CD для проверки, что профиль не просрочен перед сборкой релиза.

Типичные ошибки с Provisioning Profile

Наиболее частая ошибка — "No matching provisioning profiles found" при сборке в Xcode. Она возникает, когда Xcode не может найти профиль, соответствующий конфигурации сборки: Bundle Identifier не совпадает с App ID в профиле, сертификат не установлен в связке ключей или профиль истёк. Решение — проверить настройки Signing & Capabilities в таргете и при необходимости переключиться на Automatically manage signing.

Ошибка "Provisioning profile doesn't include the selected device" появляется при попытке запустить Development или Ad Hoc сборку на устройстве, UDID которого не добавлен в профиль. Apple Developer Portal позволяет добавить устройство в существующий профиль — после этого профиль нужно перекачать и установить заново. Xcode при автоматическом управлении подписью добавляет подключённое устройство в профиль автоматически.

Проблема с entitlements проявляется ошибкой "The executable was signed with invalid entitlements" при выгрузке в App Store Connect. Причина — несовпадение entitlements в профиле и в файле .entitlements проекта. Apple требует, чтобы набор прав в профиле был надмножеством прав, запрашиваемых приложением. Решение — проверить Capabilities в таргете Xcode и убедиться, что все включённые сервисы имеют соответствующие entitlements в профиле. Fastlane включает команду produce, которая синхронизирует App ID и профили с актуальными entitlements.

Часто задаваемые вопросы

Можно ли использовать один Provisioning Profile для нескольких приложений?

Да, если App ID в профиле использует wildcard-идентификатор вида com.example.*. Однако wildcard-профили не поддерживают Push-уведомления, iCloud, Game Center и App Groups. Apple рекомендует создавать отдельный explicit профиль для каждого приложения, использующего расширенные Capabilities.

Что произойдёт, если Provisioning Profile истёк, а приложение уже в App Store?

Приложение, загруженное через App Store, использует Store-профиль Apple, который не зависит от профиля разработчика. Пользователи продолжат загружать и запускать приложение. Истекший профиль препятствует только загрузке нового билда в App Store Connect — Apple требует, чтобы Distribution профиль был действителен на момент отправки.

Как перенести Provisioning Profile на другой компьютер?

Профиль можно скопировать в папку ~/Library/MobileDevice/Provisioning Profiles на новом компьютере. Однако профиль привязан к сертификату, закрытый ключ которого находится в связке ключей. Необходимо также экспортировать сертификат с закрытым ключом через Keychain Access и импортировать на новом устройстве.

Сколько Provisioning Profile может быть на одном компьютере?

Ограничений по количеству профилей на компьютере нет. Профили хранятся в папке ~/Library/MobileDevice/Provisioning Profiles и нумеруются по UUID. Xcode автоматически выбирает подходящий профиль по App ID и типу сборки. Для упрощения управления рекомендуется удалять неиспользуемые профили через Xcode Accounts Preferences.

Чем отличается Provisioning Profile от Signing Certificate?

Signing Certificate подтверждает личность разработчика — это криптографический ключ, выпущенный Apple. Provisioning Profile — это конфигурационный файл, который указывает, какое приложение (App ID) под каким сертификатом и на каких устройствах может быть запущено. Профиль всегда ссылается на конкретный сертификат, но не заменяет его.

Итоги

  • Provisioning Profile — обязательный компонент подписи iOS-приложений, связывающий сертификат, App ID и устройства
  • Development профиль используется для тестирования на физических устройствах с регистрацией UDID
  • App Store профиль применяется для публикации и не содержит списка устройств — Apple управляет распространением
  • Ad Hoc позволяет распространять приложение среди 100 тестировщиков без App Store
  • Enterprise профиль предназначен для корпоративного распространения без ограничения по устройствам
  • Entitlements внутри профиля определяют доступ приложения к системным сервисам Apple
  • CI/CD требует хранения профилей в защищённом хранилище с использованием Fastlane или аналогичных инструментов

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также