Если App Store Connect показывает для сборки TestFlight статус «Not Available for Testing», сначала откройте сведения о сборке: Apple связывает именно этот статус с отсутствующим в Provisioning Profile идентификатором приложения. Проверьте профиль, создайте сборку с подходящим идентификатором и загрузите её заново; повторно отправлять приглашения тестерам до проверки новой сборки бессмысленно.
Этот разбор для вас, если после первой загрузки вы видите, что билд нельзя тестировать, и хотите понять причину, прежде чем менять проект.
Он также пригодится, если вы отвечаете за подпись и сборку в небольшой команде либо готовите внешний тест и должны подтвердить, что тестировщикам назначен доступный билд.
Статус «Not Available for Testing»: что проверять в первую очередь
Не считайте все сообщения о недоступности взаимозаменяемыми. Статус «Not Available for Testing» указывает на конкретную проблему с Provisioning Profile, тогда как обработка, отсутствие сведений о соответствии экспортным требованиям и истечение срока действия требуют других действий. Сверьте формулировку в карточке сборки с официальным описанием статусов сборок App Store Connect, а не только с уведомлением о завершении загрузки.
Запись о том, что файл принят при загрузке, сама по себе не означает, что билд уже можно назначить на тестирование. Сначала сборка должна пройти обработку, а затем получить состояние, допускающее тестирование. Поэтому ориентируйтесь на страницу конкретной сборки и её актуальные сведения, а не на письмо об успешной передаче файла или на старую ссылку приглашения.
В интерфейсе App Store Connect найдите нужное приложение и откройте запись именно того билда, который собираетесь распространять. Сопоставьте идентификатор сборки, дату загрузки и состояние: если в списке есть несколько кандидатов, проверка не того билда легко создаёт впечатление, что исправление не сработало.
Сценарий. Вы загрузили архив, получили подтверждение, а затем увидели «Not Available for Testing». Если начать заново приглашать тестировщиков, вы не устраните причину, указанную для этой сборки: приглашение не добавляет приложению недостающий идентификатор. Сначала подтвердите статус и проверьте подпись; к настройкам группы переходите только после того, как новый билд станет доступен для тестирования.
Для быстрой ориентации используйте развилку:
- Если в карточке именно «Not Available for Testing», проверьте идентификатор приложения в профиле подписи и пересоберите приложение с корректной конфигурацией.
- Если отображается «Processing» или другое состояние обработки, не приписывайте его Provisioning Profile: дождитесь результата обработки и затем действуйте по статусу, указанному в App Store Connect.
- Если система запрашивает сведения об экспортном соответствии, заполните их для этого билда по руководству Apple по экспортному соответствию бета-сборок.
- Если сборка истекла, подготовьте и загрузите актуальный билд; не пытайтесь восстановить истёкшую сборку изменением идентификатора приложения.
- Если билд уже доступен, но тестировщик не видит его, проверьте назначение в тестовую группу и доступ пользователя.
Эта проверка отвечает на главный вопрос «что означает этот статус»: это не универсальная метка любой проблемы TestFlight, а указание на определённый дефект конфигурации подписи. Для других состояний причина может быть иной, и исправление профиля тогда не является первым шагом.
Если отсутствует идентификатор приложения: сопоставьте профиль и цель сборки
Apple описывает «Not Available for Testing» как состояние, при котором Provisioning Profile не содержит идентификатор приложения; для восстановления тестирования требуется загрузить новую сборку с подходящим профилем. Это определение не означает, что любой сбой тестирования вызван профилем. Оно относится к конкретной формулировке статуса. См. описание состояний сборки Apple.
Проверяйте не название профиля, а данные, которые фактически использованы при подписании. Например, понятное имя вроде «Release» или «Distribution» не доказывает, что профиль предназначен именно для нужного приложения. Сопоставьте Bundle Identifier целевого приложения, его настройки подписи и идентификатор, содержащийся в профиле. В документации Apple по созданию профиля распространения через App Store описан процесс подготовки профиля для распространения.
Проверьте следующие элементы в проекте и конфигурации сборки:
- Цель приложения: убедитесь, что проверяете основное приложение, а не расширение или вспомогательную цель с отдельным идентификатором.
- Bundle Identifier: сверьте значение в настройках цели с идентификатором зарегистрированного приложения в App Store Connect.
- Настройки подписи для конфигурации, из которой создаётся архив: проверьте выбранную команду разработчика, режим управления подписью и профиль, если он выбирается явно.
- Фактически подписанный продукт: если сборка автоматизирована, выясните, какие настройки и материалы применились в задаче, создавшей архив, а не только какие значения сохранены в проекте.
- Профиль: при необходимости загрузите актуальный профиль и проверьте, что он предназначен для нужного идентификатора приложения. Apple описывает действия для редактирования, загрузки и удаления профилей.
Для диагностики полезно сопоставить два значения: идентификатор приложения, включённый в профиль, и идентификатор, с которым подписан продукт. Если они не соответствуют друг другу, исправьте конфигурацию подписи и повторно соберите приложение. Если данные совпадают, но статус остаётся прежним, сначала исключите ошибку выбора билда и дождитесь обновления состояния в App Store Connect; при необходимости повторите сборку и загрузку, фиксируя, какая именно конфигурация использовалась.
Чем отличается профиль от имени конфигурации
Имя конфигурации в Xcode — это удобная метка проекта. Оно не подтверждает состав Provisioning Profile и не доказывает, что архив создан с нужными параметрами. Причину следует искать в настройках конкретной цели, настройках подписи для архива и свойствах готового приложения.
У проекта также могут быть отдельные идентификаторы для приложения и расширений. Если архив включает дополнительные цели, проверяйте их подпись отдельно: совпадение главного Bundle Identifier не гарантирует, что настройки всех компонентов корректны. При этом не меняйте идентификаторы наугад — это может затронуть соответствие приложения записи в App Store Connect и существующую конфигурацию распространения.
Ручной архив и автоматизированная сборка: как установить источник подписи
Способ сборки влияет на то, где искать ошибку. При ручном архивировании проверьте параметры подписи выбранной цели и конфигурации в Xcode, затем откройте сведения об архиве и сопоставьте их с настройками проекта. Официальные рекомендации по подготовке и распространению приложения приведены в документации Apple по распространению через Xcode.
При автоматизированной сборке источник расхождения может находиться не в локальном проекте, а в окружении задачи: сохранённые параметры, загруженные сертификаты и профили, выбранная конфигурация или сценарий экспорта могут отличаться от тех, которыми вы пользуетесь вручную. Просмотрите журнал именно неудачной или подозрительной задачи и выясните, какой архив она создала, какие настройки подписи применились и какой результат был загружен.
Практичная проверка строится на трёх независимых следах:
- Настройки проекта. Зафиксируйте Bundle Identifier нужной цели и значения подписи для конфигурации, используемой при архивировании.
- Журнал сборки. Найдите запись об архивировании и экспорте, чтобы подтвердить, какой шаг и какие параметры применились в фактическом процессе.
- Готовый архив или пакет приложения. Сопоставьте подпись и сведения о включённом профиле с проектом. Если вы исследуете экспортированный IPA, сначала убедитесь, что анализируете именно тот файл, который отправили в App Store Connect.
Для локальной проверки содержимого профиля в приложении можно декодировать файл embedded.mobileprovision командой security cms -D -i, а затем проверить поле application-identifier в полученных данных. Для подписанного приложения сведения о правах можно вывести командой codesign -d --entitlements :-. Выполняйте эти команды на фактическом продукте, а не на произвольном архиве; структура экспортированного пакета и применённые параметры зависят от выбранного процесса сборки.
Эти проверки помогают отделить предположение «в проекте профиль выбран правильно» от факта «именно этот профиль использован в загруженном продукте». Если результаты не совпадают, исправляйте источник сборки, а не только настройки рабочей копии. В спорной ситуации воспроизведите сборку с тем же сценарием и сравните журнал, настройки и продукт. Конкретные названия элементов интерфейса могут различаться между версиями инструментов, поэтому сверяйте действия с актуальной документацией и проверяйте результат на своём проекте.
Какие состояния требуют профиля, а какие — другого действия
Сравнение ниже помогает не запускать ненужную пересборку и не исправлять подпись, если причина относится к другому этапу. Состояние в карточке сборки важнее того, на каком шаге, по вашему мнению, «должна была» возникнуть проблема.
| Что показывает App Store Connect | Как трактовать | Следующее действие |
|---|---|---|
| «Not Available for Testing» | Для этого статуса Apple указывает на отсутствие идентификатора приложения в Provisioning Profile | Сопоставить профиль с целью и Bundle Identifier, затем загрузить новую сборку |
| «Processing» или другое состояние обработки | Проверяется загруженный билд; это не тождественно статусу, связанному с профилем | Дождаться результата обработки и действовать по обновлённому состоянию |
| Требуются сведения об экспортном соответствии | Для билда не завершён отдельный этап предоставления информации | Заполнить запрошенные сведения по официальной инструкции |
| Сборка истекла | Этот билд больше нельзя использовать для тестирования | Подготовить актуальный билд и проверить его доступность |
| Билд доступен, но тестировщик его не видит | Проверять нужно назначение билда, группу и доступ тестировщика | Связать билд с нужной группой и проверить права пользователя |
Для состояний, связанных с экспортным соответствием, используйте именно инструкцию по предоставлению сведений для бета-сборок. Не заменяйте её изменением профиля подписи: эти действия относятся к разным проверкам. По той же причине истечение срока действия следует отличать от ошибки идентификатора, а текущую формулировку состояния — перепроверять перед повторной загрузкой.
После повторной загрузки: подтвердите тестовую группу и доступ
Загрузка новой сборки — необходимый шаг для исправления статуса профиля, но сама по себе она не доказывает, что тестировщик уже может установить приложение. Сначала откройте новый билд в App Store Connect и дождитесь, пока его состояние станет пригодным для распространения. Проверяйте именно новую запись: старый билд может по-прежнему показывать прежнюю ошибку.
Затем проверьте, что нужная сборка связана с нужной группой. Тестировщик может не увидеть билд, если он не назначен его группе, даже когда статус сборки уже позволяет тестирование. Сверьте, к какой группе вы добавили билд, какой тип тестирования используете и имеет ли пользователь соответствующий доступ. Порядок назначения и приглашения описан в официальной инструкции Apple по добавлению тестировщиков к сборкам.
Внешнее тестирование и доступность самой сборки — разные этапы. Внешняя проверка или ожидание её завершения не должны автоматически трактоваться как ошибка Provisioning Profile. Сначала выясните, какой статус указан у билда, а затем проверьте этап, относящийся к тестовой группе. Обзор TestFlight и различий между этапами распространения приведён в руководстве Apple по TestFlight.
После назначения попросите тестировщика обновить список сборок или открыть актуальное приглашение, если оно требуется в вашем сценарии. Если билд по-прежнему не появляется, соберите проверяемые факты: статус новой сборки, её номер, группа, пользователь и момент проверки. Так вы сможете отделить проблему доступа от старого состояния билда, не пересоздавая профили и приглашения без основания.
Повторная сборка: сохраните запись, по которой можно проверить результат
Чтобы не повторять диагностику при следующем выпуске, зафиксируйте результат по каждой исправленной сборке. Это особенно полезно, если проект собирается разными участниками или часть релизов проходит через автоматизированный процесс.
Запишите:
- идентификатор коммита или другую точную отметку исходников;
- номер новой сборки и её идентификатор в App Store Connect;
- цель и конфигурацию, использованные при архивировании;
- источник параметров подписи и способ проверки Provisioning Profile;
- состояние новой сборки после обработки;
- название тестовой группы, которой назначен билд, и результат проверки доступа тестировщика.
Не храните в такой записи секретные ключи или приватные данные сертификатов. Для подтверждения исправления достаточно зафиксировать, какие материалы и настройки применялись, не копируя закрытые секреты в журнал проекта. Если процесс сборки автоматизирован, сохраните ссылку на соответствующий журнал или безопасно доступную запись о задаче.
Критерий завершения прост: у новой сборки нет статуса «Not Available for Testing», она назначена требуемой группе, а тестировщик с нужным доступом может увидеть её. Если выполнена только загрузка, но не проверены состояние и группа, проблему ещё нельзя считать закрытой.
Когда повторять исправление, а когда менять среду сборки
Если проблема воспроизводится, вернитесь к трём доказательствам: параметрам проекта, журналу фактической сборки и сведениям о продукте. Если они расходятся, исправляйте тот этап, который действительно использовал неподходящий профиль. Если совпадают, но статус остаётся прежним, убедитесь, что проверяете новый билд, а не старую запись, и дождитесь обновления состояния после обработки.
Для одного выпуска обычно разумно сначала исправить текущую среду сборки: менять инфраструктуру ради единичной ошибки не обязательно. Но если команде регулярно требуется выделенный Mac для архивирования, подписи и публикации, локальная машина может быть занята другими задачами, её конфигурация может отличаться от окружения сборки, а поддержание постоянной доступности создаёт отдельную операционную нагрузку. Это реальные издержки, которые стоит сравнить с требованиями проекта и частотой релизов, а не с обещанием универсальной экономии.
Если вам нужно временно получить macOS-среду для проверки конфигурации или публикационного процесса, можно оценить варианты удалённого Mac и их различия, а формат сервиса посмотреть в описании удалённого Mac от VpsHold. Удалённая машина не исправит неверный Bundle Identifier автоматически, и вам всё равно нужно проверять фактически применённый профиль. Зато отдельная среда может быть удобнее, когда локальный Mac занят, не подходит для постоянной сборки или у команды нет собственной машины для релизной работы. Если вы стабильно выполняете тяжёлые задачи на одной конфигурации либо зависите от физических интерфейсов, сначала сравните аренду с собственной машиной: удалённый доступ подходит не для каждого процесса.
Читайте также
Проверьте сборку TestFlight на отдельном Mac
Используйте физический Mac mini VpsHold для сборки проекта в Xcode и проверки настроек подписи перед повторной отправкой билда.
