Приложение XXX не установлено, так как права недействительны.

Я пытаюсь создать сборку для небольшой группы тестировщиков, не являющихся разработчиками, чтобы провести бета-тестирование моего приложения, прежде чем я отправлю его в iTunes Connect. Я прочитал Руководство разработчика по " Распространение вашего приложения для тестирования (вам может потребоваться регистрация в Apple, чтобы прочитать это), а также Техническая записка TN2250 о специальном распространении, а также бесчисленные сообщения в блогах и статьи о переполнении стека, но пока безуспешно.

Шаги, которые я предпринял:

  • (Я использую Xcode 3.2.5.)
  • Я создал профиль обеспечения разработки на портале подготовки iOS и включил устройства для всех тестировщиков.
  • Я загрузил этот профиль и установил его в Xcode, перетащив его в окно Организатора, и я вижу профиль в разделе «Разработка»> «Профили обеспечения».
  • Я установил этот профиль как «Идентификатор подписи кода> Любая iOS» в настройках проекта и цели.
  • Я создал файл Entitlements.plist, установил тип списка свойств на «iPhone Entitlements plist», удалил все строки, кроме «Можно отладить», и снял флажок
  • Я установил "Права на подписание кода" на Entitlements.plist (точное имя с учетом регистра) как в проекте, так и в настройках цели.
  • У меня есть "Сборка и архивирование" моего проекта
  • В окне "Организатор" я выбрал свой проект и нажал "Поделиться ...", выбрал тот же профиль подготовки, что и выше, и сохранил полученный .ipa на диск.
  • Я сжал .ipa и профиль обеспечения в zip-файл и отправил его своим тестерам.

У тестеров есть:

  • Разархивировал отправленный мною файл
  • Пробовал установить, просто перетащив .ipa в iTunes и синхронизируя
  • Пробовал установить, сначала перетащив .mobileprofile в iTunes и синхронизируя

В любом случае в конце синхронизации они получают диалоговое окно с сообщением «Приложение [мое имя приложения] не было установлено на [их устройство и имя устройства], потому что права недействительны ".

Возможно, стоит также отметить, что прошлой осенью я смог раздать более раннюю версию этого же приложения тем же тестерам без каких-либо проблем и без списка прав. Я не уверен, что изменилось, кроме обновления Xcode.

Может ли кто-нибудь дать представление или увидеть, что я делаю не так?

[Я также разместил это на форумах разработчиков Apple и повторно опубликую здесь любые решения.]


person AndrewCr    schedule 03.03.2011    source источник


Ответы (3)


Файл * .ipa уже должен содержать профиль обеспечения. Вы можете легко убедиться в этом на компьютере с Windows, если воспользуетесь утилитой zip. Это просто zip-архив с другим расширением.

На устройствах установлена ​​правильная версия iOS для приложения?

На устройствах в Setting > General > Profiles вы можете увидеть список любых установленных профилей обеспечения, чтобы устранить это как проблему. Вы получаете несколько копий с каждым новым сертификатом, созданным при добавлении новых устройств. Не помешает удалить все профили и проверить, добавлен ли ваш последний.

Когда вы делаете свою сборку, в результатах сборки щелкните правой кнопкой мыши и выберите Open These Latest Results as Transcript Text File, затем найдите CodeSign, который покажет вам результат для этого шага, и вы должны четко увидеть, какой профиль был использован. Вы также можете выполнить поиск Entitlements.plist, проверить используемый путь, а затем просмотреть этот файл.

Вы говорите, что удалили все строки. У меня нет записи Can be debugged, но у меня есть application-identifier и keychain-access-group, которые кажутся довольно связанными с подписью кода. Вот простая текстовая версия файла, которую вы можете попробовать;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <!--- Required entitlements (in most cases shouldn't be changed) --->
    <key>application-identifier</key>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>

    <!--- Custom entitlements below --->


</dict>
</plist>

Если что-то из этого кажется неправильным, это шаги, которые предлагает Apple при подготовке сборки дистрибутива;

  1. Выберите цель и откройте инспектор параметров сборки. Подтвердите, что вы находитесь в конфигурации распространения.
  2. Удалите идентификатор подписи кода: iOS Распространение: COMPANYNAME
  3. В меню сборки Xcode выберите Очистить все цели.
  4. Удалите все существующие каталоги сборки в вашем проекте Xcode с помощью Finder.
  5. Повторно запустите Xcode и откройте свой проект.
  6. Повторно введите идентификатор для подписи кода Распространение iOS: КОМПАНИЯ ИМЯ в Инспекторе параметров целевой сборки.
  7. Восстановите свой проект.

Надеюсь, что-то из этого поможет или зажжет ага! момент.

person Dave Anderson    schedule 04.03.2011
comment
Отличный ответ. Спасибо за понимание и советы. В конечном счете, похоже, что последний раздел (о том, как сделать действительно чистую сборку) сделал свое дело. Хотя, основываясь на ваших других заметках о правах, я фактически удалил все, что касается прав, из своего проекта. Я нашел другие блоги, в которых говорилось о важности права get-task-allow (теперь оно называется, по-видимому, может быть отлажено в XCode), но в текущих документах об этом не упоминается. Судя по всему, сейчас в этом нет необходимости. (По крайней мере, это мой текущий опыт.) - person AndrewCr; 04.03.2011

Права подписи кода больше не требуются для сборок Ad Hoc в Xcode 4 - см. Подробные примечания в Техническая записка Apple TN2250

person snibbe    schedule 11.08.2011

  1. Зайдите на сайт разработчика и войдите в систему.
  2. В разделе «Профили обеспечения» выберите «Разработка».
  3. Откройте свой профиль обеспечения, дважды щелкнув его.
  4. Вы увидите "App ID: somenameyouwrote(com.somenameyouwrote)"
  5. Запишите, что именно находится в скобках, т.е. "com.somenameyouwrote"
  6. В XCode откройте файл .plist.
  7. В поле "bundle identifier:" введите все, что вы записали на шаге 5.
  8. В XCode нажмите стрелку "Targets" и дважды щелкните цель, на которой будет указано имя вашего AP.
  9. В открывшемся информационном окне цели убедитесь, что выбран "Build".
  10. Откройте "Code Signing Identity" и под ним выберите "Any iOS".
  11. Справа от "Any iOS" выберите указанный профиль, идентификатор Ap которого совпадает с тем, который вы указали в списке.
  12. БАМ! Разочарование прошло!
person Jeremy Lloyd    schedule 13.02.2014