Экспорт IPA недоступен: почему Xcode не даёт собрать файл и как это исправить

Кнопка Distribute App в окне Organizer неактивна, а при попытке экспорта через меню Product → Archive Xcode выдаёт сообщение о невозможности создать IPA-файл — типичный признак проблемы с подписью кода или конфигурацией проекта. Экспорт IPA недоступен не из-за сбоя самого Xcode, а потому что среда не может подтвердить право подписать сборку: не найден действующий сертификат, профиль обеспечения (provisioning profile) не совпадает с bundle ID либо архив собран без нужных параметров.

Проблема встречается и у разработчиков с платным аккаунтом Apple Developer Program, и у тех, кто собирает приложение с бесплатной учётной записью для установки на своё устройство. Ниже разберём, как проверить каждое звено цепочки подписи и вернуть возможность экспорта, не прибегая к рискованным действиям вроде ручной правки файлов проекта.

Как устроен экспорт IPA и где цепочка рвётся

Чтобы получить файл .ipa, Xcode выполняет три этапа: компиляцию, архивацию (создание .xcarchive) и экспорт с переподписью. Недоступность экспорта почти всегда означает, что сбой произошёл на втором или третьем этапе: архив либо не распознан как приложение iOS, либо не может быть подписан выбранным способом распространения.

Важно понимать: сам архив при этом часто существует и отображается в Organizer (Window → Organizer). Проблема касается именно шага Distribute, где Xcode проверяет сертификаты, профили и соответствие требованиям выбранного метода дистрибуции — App Store Connect, Ad Hoc, Enterprise или Development.

  • 🔐 Сертификат подписи — отсутствует, отозван или истёк срок действия в Связке ключей.
  • 📄 Provisioning profile — не покрывает bundle ID приложения или не включает нужные устройства.
  • ⚙️ Схема сборки — архив создан для симулятора или с конфигурацией Debug без настроек подписи.
  • 👤 Учётная запись Apple ID — не добавлена в Xcode или истёк срок сессии авторизации.

Проверка учётной записи разработчика в Xcode

Первым делом откройте настройки среды: Xcode → Settings → Accounts. Убедитесь, что ваш Apple ID присутствует в списке и рядом с ним нет предупреждений о необходимости повторного входа. Если сессия истекла, Xcode не сможет запросить у серверов Apple актуальные сертификаты и профили, и экспорт будет заблокирован.

Выберите свою команду (Team) и нажмите Manage Certificates. Здесь видно, какие сертификаты подписи существуют локально. Если список пуст или нужный сертификат отмечен как недействительный, создайте новый через кнопку «+» — для экспорта сборок под App Store или Ad Hoc нужен сертификат типа Apple Distribution, для тестовой установки на устройства — Apple Development.

⚠️ Внимание: отзыв сертификата Apple Distribution делает невозможной подпись новых сборок всеми, кто им пользовался. В командной разработке согласуйте отзыв с коллегами, прежде чем пересоздавать сертификат.

Настройки подписи в самом проекте

Откройте настройки таргета: вкладка Signing & Capabilities. Самый надёжный вариант для большинства случаев — включить Automatically manage signing и выбрать свою команду в выпадающем списке Team. Тогда Xcode сам создаст и обновит профиль обеспечения, а вероятность несовпадения bundle ID и профиля исчезает.

Если автоматическое управление отключено (это часто встречается в проектах с CI/CD), проверьте вручную: профиль, указанный для конфигурации Release, должен быть актуальным, содержать правильный App ID и не быть просроченным. Устаревший профиль — одна из самых частых причин, почему экспорт IPA недоступен именно на шаге Distribute.

☑️ Проверка подписи перед архивацией

Выполнено: 0 / 5

Почему архив может не подходить для экспорта

Не каждый архив в Organizer можно превратить в IPA. Если кнопка Distribute App неактивна для конкретного архива, проверьте, как он был собран. Архив, созданный при выбранной цели-симуляторе, не является архивом приложения для устройства — в Organizer он либо не появится вовсе, либо будет помечен иначе, и экспорт для него недоступен.

Перед архивацией убедитесь, что в панели выбора цели стоит Any iOS Device или подключённое физическое устройство, а не симулятор. Затем выполните Product → Archive. Также проверьте схему сборки: Product → Scheme → Edit Scheme → Archive — конфигурация должна быть Release (или иная, для которой настроена подпись).

Ещё одна возможная причина — в проекте задан параметр Skip Install в значении NO для вспомогательных таргетов (например, встроенных фреймворков или библиотек). Тогда архив формируется как «универсальный» пакет без единого приложения, и Xcode не предлагает стандартный экспорт IPA. Для основного таргета приложения Skip Install должен быть NO, для вложенных библиотек — YES.

📊 На каком этапе у вас недоступен экспорт IPA?
Кнопка Distribute App неактивна в Organizer
Ошибка при выборе метода дистрибуции
Архив вообще не создаётся
Ошибка подписи на финальном шаге экспорта

Способы дистрибуции и их ограничения

Даже при корректном архиве экспорт может быть недоступен для конкретного способа распространения. Каждый метод предъявляет свои требования к аккаунту и профилю, и несоответствие любому из них блокирует кнопку далее в мастере экспорта.

МетодТребуемый аккаунтТипичная причина блокировки
App Store ConnectПлатный Apple Developer ProgramПриложение не создано в App Store Connect или нет прав у роли
Ad HocПлатный Apple Developer ProgramUDID устройства не добавлен в профиль
EnterpriseApple Developer Enterprise ProgramНет корпоративной программы или сертификата
DevelopmentЛюбой, включая бесплатныйУстройство не зарегистрировано в профиле разработки

Обратите внимание: метод Enterprise доступен только участникам отдельной корпоративной программы Apple. Если у вас обычный платный аккаунт, этот пункт будет недоступен или приведёт к ошибке — это не сбой, а ограничение типа учётной записи.

Ошибки на финальном шаге экспорта

Иногда мастер экспорта запускается, но завершается ошибкой вроде «No profiles for ... were found» или сообщением о невозможности подписать компонент. Это значит, что локальное состояние профилей рассинхронизировалось с серверами Apple. Помогает последовательность: в Xcode → Settings → Accounts выбрать команду и нажать Download Manual Profiles, затем повторить экспорт.

Если ошибка сохраняется, попробуйте очистить производные данные: удалите содержимое папки ~/Library/Developer/Xcode/DerivedData (сам проект это не затронет), перезапустите Xcode и создайте архив заново. Просроченные профили также можно удалить вручную из ~/Library/MobileDevice/Provisioning Profiles — при следующей сборке с автоматической подписью Xcode скачает свежие.

Экспорт через командную строку

Если графический интерфейс капризничает, экспорт можно выполнить через xcodebuild: сначала создать архив командой xcodebuild -archivePath, затем экспортировать с флагом -exportArchive и файлом ExportOptions.plist, где задаётся метод дистрибуции и команда. Этот способ не обходит требования к сертификатам — он лишь даёт более подробный текст ошибки в логе, что помогает диагностике.

⚠️ Внимание: перед удалением профилей и DerivedData убедитесь, что у вас есть доступ к аккаунту разработчика для их повторной загрузки. Без интернета и действующей авторизации восстановить профили не получится, и сборка остановится полностью.

Когда ничего не помогает

Если сертификаты действительны, профили свежие, а экспорт по-прежнему недоступен, проверьте версию Xcode: устаревшая среда может некорректно работать с новыми требованиями Apple к подписи. Обновление через App Store или с портала разработчиков нередко снимает необъяснимые блокировки. Параллельно стоит посмотреть статус сервисов Apple — иногда проблема на стороне серверов, и достаточно повторить попытку позже.

Для проектов со сложной структурой (несколько таргетов, расширения, watch-компаньоны) полезно временно упростить конфигурацию: собрать архив только основного приложения и проверить, станет ли экспорт доступен. Так вы локализуете, какой именно компонент ломает подпись, вместо перебора настроек вслепую.

Частые вопросы

Почему кнопка Distribute App серая и не нажимается?

Чаще всего архив не распознан как архив iOS-приложения: он собран для симулятора, либо в проекте неверно настроен параметр Skip Install у вложенных таргетов. Пересоберите архив с целью Any iOS Device и проверьте настройки таргетов.

Можно ли экспортировать IPA с бесплатным аккаунтом разработчика?

Да, но только методом Development для установки на зарегистрированные устройства. Методы App Store Connect, Ad Hoc и Enterprise требуют платных программ Apple.

Что делать, если Xcode пишет, что профиль не найден?

Включите Automatically manage signing в настройках таргета или нажмите Download Manual Profiles в разделе Accounts. Если профиль создан вручную, проверьте, что его bundle ID совпадает с идентификатором приложения и срок действия не истёк.

Влияет ли истёкший сертификат на уже собранные архивы?

Да. Экспорт — это повторная подпись, поэтому для неё нужен действующий сертификат на момент экспорта, даже если архив был создан раньше, когда сертификат ещё работал.

Нужно ли удалять старые provisioning-профили?

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