В официальной документации Apple сертификат и private key описаны как разные части signing identity: сертификат подтверждает право подписи, а закрытый ключ создаётся на Mac вместе с CSR и нужен для самой операции подписи (инструкция Apple по созданию CSR). Поэтому при истёкшем Apple Distribution сертификате в 2026 году нельзя начинать с массового отзыва активов. Сначала нужно определить режим подписи: автоматический или ручной. Затем восстановить только необходимый комплект, создать Archive и проверить загрузку в App Store Connect.
Эта статья предназначена для трёх групп:
- руководителей обновления, у которых приближается окно публикации;
- менеджеров, принявших проект от внешней команды без private key или исходного Mac;
- администраторов международных команд, которым нужно предоставить техническому специалисту стабильный Mac для восстановления подписи и сборки.
[ SECTION_01 ] Истёкший сертификат — не всегда причина сбоя обновления
Apple Developer Program, Apple Distribution сертификат, provisioning profile и запись приложения в App Store Connect относятся к разным уровням процесса. Состояние одного объекта нельзя автоматически переносить на остальные.
Участник команды может увидеть предупреждение о сертификате, но фактическая причина остановки релиза окажется другой:
- проект выбран не в той команде Apple Developer;
- provisioning profile больше не соответствует Bundle ID;
- на Mac установлен сертификат без private key;
- пользователь не имеет права управлять сертификатами;
- сборка подписывается для другого способа распространения;
- новый Archive создаётся, но не проходит проверку до загрузки.
Статус опубликованного приложения также не равен статусу текущего сертификата. Истёкший сертификат обычно требует внимания к следующей сборке, а не означает, что уже размещённая версия немедленно перестаёт быть доступной. При этом для App Store, Ad Hoc и корпоративного распространения действуют разные цепочки подписи. Их нельзя смешивать в одной процедуре.
Проверьте тип распространения в проекте и на портале разработчика. В официальном обзоре Apple отдельно описаны сертификаты для разных задач и требования к доступу (обзор типов сертификатов Apple).
Внимание. До любых изменений сохраните скриншот предупреждения, название Team, выбранный способ подписи и полный текст ошибки Xcode. Эти сведения позволяют отличить истёкший сертификат от неправильной команды или несовместимого профиля.
[ SECTION_02 ] Первая развилка: автоматическая подпись или ручное управление
Автоматическая подпись подходит проектам, в которых Xcode должен управлять signing assets через связанную команду разработчика. Ручная подпись применяется там, где проект, CI-процесс или внутренняя политика требуют явно выбрать сертификат и provisioning profile.
Разница влияет на порядок восстановления:
- при автоматической подписи сначала проверяются Apple Account, Team и права пользователя;
- при ручной подписи проверяются сертификат, private key, Bundle ID и профиль;
- при потере исходного Mac автоматическая схема может восстановиться после входа в правильную команду;
- при ручной схеме простого скачивания файла сертификата недостаточно.
Cloud-managed certificates не отменяют требования к команде и разрешениям. Apple описывает их как управляемые облаком сертификаты, которые используются в поддерживаемых сценариях подписи (официальное описание cloud-managed certificates). Это не универсальная кнопка исправления любого проекта.
В Xcode откройте настройки Signing & Capabilities и зафиксируйте:
- включено ли «Automatically manage signing»;
- какая команда указана в поле Team;
- какой Bundle Identifier используется;
- появляется ли предупреждение о сертификате или provisioning profile;
- какой тип назначения выбран для текущей конфигурации.
Если проект должен выпускаться от имени организации, важно проверить права самого пользователя. Таблица ролей Apple показывает, какие действия доступны участникам команды (официальная таблица ролей и разрешений).
Автоматический сценарий восстановления
- Войдите в Xcode под аккаунтом, который действительно состоит в нужной команде.
- Выберите правильный Team и убедитесь, что Bundle ID совпадает с приложением.
- Оставьте автоматическое управление подписью включённым, если проект изначально работал в этом режиме.
- Очистите только явно устаревший выбор подписи, не отзывая все сертификаты команды.
- Создайте новый Archive.
- Откройте окно распространения и запустите проверку перед загрузкой.
- Сохраните результат проверки и текст возможной ошибки.
Если Xcode предлагает исправление signing assets, сначала изучите, какой именно ресурс он собирается изменить. Не подтверждайте действие, если оно затрагивает другие приложения или рабочие процессы.
[ SECTION_03 ] Вторая развилка: ручная подпись и пересоздание комплекта
При ручной подписи Apple Distribution сертификат должен быть действующим, а private key — доступным на том Mac, где выполняется сборка. Затем provisioning profile должен соответствовать приложению и новому сертификату.
Последовательность лучше сохранять именно такой.
Шаг 1. Найдите текущий проект и владельца подписи
Зафиксируйте название приложения, Bundle ID, схему сборки и человека, который раньше выполнял Archive. Проверьте, не используется ли тот же сертификат в другом проекте или на сервере сборки.
Шаг 2. Создайте или подтвердите новый сертификат
Уполномоченный участник команды создаёт новый Apple Distribution сертификат. Если Apple требует CSR, его нужно создать на том Mac, где будет доступен private key. Инструкция Apple по CSR объясняет, почему ключ формируется локально, а не появляется из скачанного сертификата.
Не удаляйте старый сертификат до проверки зависимых проектов. Истёкший актив обычно не нужно срочно отзывать: отзыв — отдельное действие с последствиями для процессов, которые ещё используют соответствующую signing identity.
Шаг 3. Проверьте private key в Keychain Access
Откройте связку ключей на Mac и найдите сертификат. У корректной signing identity рядом должен отображаться соответствующий private key. Если виден только сертификат, ручная подпись может завершиться ошибкой даже после установки нового provisioning profile.
Файл сертификата, скачанный с портала, не заменяет закрытый ключ. Ключ мог остаться на исходном Mac, в защищённом хранилище команды или у прежнего владельца проекта.
Шаг 4. Создайте новый App Store provisioning profile
На портале разработчика выберите профиль для соответствующего приложения и способа распространения. Укажите действующий сертификат, если портал предлагает выбор, затем сгенерируйте профиль заново. Apple описывает создание профиля App Store отдельно от сертификата (инструкция по созданию App Store provisioning profile).
Если профиль уже существует, его можно отредактировать, скачать или удалить через предусмотренный раздел (документация по редактированию и скачиванию профилей). При этом нужно проверить, что изменён именно профиль нужного приложения, а не похожий ресурс другой команды.
Шаг 5. Установите комплект на правильный Mac
Импортируйте сертификат и профиль на Mac, который используется для сборки. Затем снова откройте проект и вручную выберите действующие signing assets. Проверьте Debug и Release отдельно: рабочая отладочная конфигурация не доказывает, что архив для App Store подписывается правильно.
Шаг 6. Создайте новый Archive и остановитесь на проверке
Не переходите сразу к массовой пересборке версий. Один новый Archive должен показать, что проблема подписи устранена. В окне распространения проверьте Team, Bundle ID, назначение и результат проверки.
[ SECTION_04 ] Если после смены Mac не хватает private key
Передача проекта на другой Mac часто создаёт ложное ощущение, что все материалы уже восстановлены. В папке проекта могут находиться исходники, настройки и профиль, но private key обычно связан с исходным Mac, где создавался CSR.
Сначала нужно установить, доступен ли прежний компьютер или прежний ответственный сотрудник. Если да, предпочтительна контролируемая передача signing identity через защищённый корпоративный процесс. Экспортированный комплект следует защищать паролем и передавать только тем, кому он необходим для конкретной задачи.
Если private key потерян, новый Mac не сможет подписывать старым сертификатом только после установки его публичной части. В этом случае участник с соответствующими правами создаёт новый сертификат, выпускает новый профиль и проверяет проект на новой signing identity.
Нельзя:
- передавать пароль Apple Account в общем чате;
- использовать общий пароль администратора Mac;
- хранить сертификаты и закрытые ключи без защиты;
- отправлять экспортированный ключ вместе с паролем одним сообщением;
- менять сертификаты всех приложений до определения затронутого проекта.
Практический контроль. В журнале передачи достаточно указать ответственного, Team, Bundle ID, способ подписи, место защищённого хранения и дату следующей проверки. Сам пароль или private key в общий документ включать не следует.
[ SECTION_05 ] Проверка после восстановления: от Archive до App Store Connect
Ошибки после создания нового сертификата нужно разделять по месту возникновения. Это экономит время и не приводит к повторному отзыву рабочих активов.
Ошибка на стадии подписи
Если Archive не проходит проверку, вернитесь к Team, сертификату, private key и provisioning profile. Проверьте, не осталась ли в проекте старая ручная ссылка на профиль. Для автоматического режима проверьте авторизацию и команду Xcode.
Профиль не соответствует приложению
Сверьте Bundle ID, тип распространения и выбранный сертификат. Новый сертификат не исправляет профиль автоматически, если проект продолжает ссылаться на прежний ресурс.
Выбрана неправильная команда
Ошибка часто появляется после передачи проекта подрядчиком. У одного Apple Account может быть доступ к нескольким командам. В этом случае сертификат может быть действительным, но выпущенным не для того Team.
Archive создан, но сборка не появилась
Если локальная проверка прошла, а сборка не отображается в App Store Connect, остановите создание новых сертификатов. Проверьте способ загрузки, выбранное приложение, статус обработки и журнал загрузки. Apple описывает требования к загрузке сборок в отдельном руководстве (официальные требования App Store Connect к загрузке). Для действий внутри Xcode используйте пошаговое руководство Apple по отправке сборки (инструкция Xcode по загрузке).
Если сообщение уже относится к версии приложения, правам, обработке сборки или настройкам App Store Connect, проблема перестала быть проблемой сертификата. Дальнейшее пересоздание signing assets только усложнит расследование.
[ SECTION_06 ] FAQ: частые ситуации при восстановлении подписи
Вопросы ниже помогают быстро сопоставить симптом с нужной веткой, не превращая восстановление в полный пересмотр проекта.
[ SECTION_07 ] Приёмочная проверка перед публикацией
Перед передачей задачи обратно операционной команде выполните пункты по порядку:
- [ ] В журнале сохранены исходное предупреждение и текст ошибки.
- [ ] Подтверждён правильный Apple Developer Program и Team.
- [ ] Определено, используется автоматическая или ручная подпись.
- [ ] Для ручного режима найден сертификат вместе с private key.
- [ ] Новый Apple Distribution сертификат создан только уполномоченным участником.
- [ ] Provisioning profile соответствует Bundle ID, Team и способу распространения.
- [ ] Профиль установлен на Mac, где создаётся Archive.
- [ ] В Xcode выбран правильный Team и Release-конфигурация.
- [ ] Новый Archive проходит проверку распространения.
- [ ] Сборка загружена поддерживаемым способом.
- [ ] App Store Connect распознал правильное приложение и версию.
- [ ] Сохранены журнал загрузки и статус обработки.
- [ ] В общей документации нет паролей, private key и других секретов.
- [ ] Зафиксированы ответственный за подпись и место защищённого хранения материалов.
[ SECTION_08 ] Как выбрать среду для восстановления и повторного релиза
После единичной проверки команда может решить, нужна ли постоянная рабочая станция или временная среда. Это уже не вопрос сертификата, а вопрос доступности Mac, сохранения Keychain, контроля доступа и повторяемости сборки.
| Вариант | Когда подходит | Риск для процесса | Что проверить на приёмке |
|---|---|---|---|
| Постоянный рабочий Mac | Регулярные релизы одной команды | Зависимость от одного устройства и владельца | Доступ, резервирование материалов, журнал сборок |
| Временный удалённый Mac | Одно обновление, передача проекта или ожидание корпоративного устройства | Ошибка передачи private key или незакреплённая сессия | Вход в нужную команду, Archive, проверка и загрузка |
| Два параллельных Mac | Команда выпускает обновления и хочет резервный путь | Расхождение Xcode, Keychain и настроек подписи | Одинаковый процесс, отдельная проверка каждого Mac |
Для временной задачи можно рассмотреть аренду Mac с американским узлом или аренду Mac с западным узлом США. Географическое расположение не заменяет разрешения Apple, не обходится проверка команды и не гарантируется результат ревью. Ценность такой среды — в доступном macOS, сохранении рабочего процесса и возможности провести контролируемый Archive на выделенном Mac.
Если после восстановления подписи нужен отдельный порядок проверки удалённой среды, полезно заранее определить критерии приёмки: доступ технического специалиста, сохранение Keychain, отсутствие общего аккаунта, журнал действий и удаление временных секретов после завершения.
Текущий вариант — случайный личный Mac сотрудника или недоступное устройство подрядчика — создаёт несколько реальных недостатков: команда зависит от одного владельца, private key может быть утрачен при увольнении, повторная сборка не воспроизводится, а перед релизом трудно подтвердить, какой Team и профиль использовались. Для разового обновления или периода ожидания оборудования аренда Mac у NOVAKVM может оказаться более управляемой альтернативой, если команда заранее проведёт Archive и загрузку как приёмочный тест. Для постоянных тяжёлых релизов и задач с физическими устройствами собственный закреплённый Mac обычно остаётся более подходящим решением.
После этого можно изучить доступные варианты аренды Mac и выбрать среду только после проверки прав, signing identity и требований конкретного проекта.
Частые вопросы
Можно ли выпустить обновление, если Apple Distribution сертификат уже истёк?
Да, истечение сертификата не означает автоматически, что опубликованное приложение исчезнет из App Store. Для нового обновления потребуется действующая подпись и корректный provisioning profile. Сначала проверьте статус Apple Developer Program и способ подписи проекта. При автоматическом управлении часто достаточно войти в правильную команду и создать новый Archive. При ручной подписи потребуется восстановить весь комплект.
Обновит ли Xcode сертификат распространения автоматически?
Это зависит от включённого автоматического управления подписью, роли пользователя и доступа команды к сертификатам. Xcode может использовать cloud-managed certificates, но не исправляет неверно выбранную команду, отсутствующие права или сломанный проект. Поэтому после входа в аккаунт нужно проверить Team, создать Archive и пройти проверку распространения, а не считать обновление сертификата гарантированным.
Что делать, если файл сертификата есть, а private key отсутствует?
Файл сертификата сам по себе не содержит закрытый ключ, созданный вместе с CSR на исходном Mac. В Keychain Access нужно проверить, отображается ли сертификат вместе с соответствующим private key. Если исходный Mac или владелец ключа доступны, безопасно передайте signing identity. Если ключ утрачен, создайте новый сертификат и профиль с учётом прав команды.
Почему после создания нового сертификата provisioning profile всё ещё недействителен?
Профиль связан не только с сертификатом. В нём должны совпадать приложение, команда, способ распространения и доступные signing assets. После создания Apple Distribution сертификата профиль App Store Connect нужно заново сгенерировать или отредактировать, скачать и выбрать в проекте. Затем удалите неоднозначный старый выбор из настроек подписи и проверьте новый Archive.
Как восстановить подпись приложения после перехода на другой Mac?
Сначала определите, использовалась автоматическая или ручная подпись. Для ручного проекта проверьте импортированную signing identity и private key, а не только файл сертификата. Если ключа нет, новый Mac не сможет подписывать старым сертификатом: уполномоченный участник команды должен создать новый комплект. Пароли Apple Account и незащищённые экспортированные ключи передавать нельзя.