Поиск и устранение неисправностей неработающей верификации подписи
Этот документ помогает в поиске и устранении неисправностей неработающей верификации подписи, которая может произойти при архивации приложения в XCode, или при проверке архива для распределения.
Обзор
Проблемы верификации подписи могут быть озадачивающими, но обычно эти типы проблем могут быть прослежены до нескольких общих падежей, которые относительно просто разрешить. Цель этого документа состоит в том, чтобы помочь разработчикам, испытывающим затруднения из-за их верификации подписи путем включения им к быстро, и легко идентифицировать, какие типы проблем они имеют и как исправить их.
Диагностирование отказа верификации подписи
Отказ верификации подписи диагностирован со следующими сообщениями об ошибках.
Ошибка Проверки Приложения перечисления 1, указывающая приложение, не подписывается с профилем распределения App Store.
Invalid Provisioning Profile |
Ошибка проверки приложения Альтернативы перечисления 2, указывающая приложение, не подписывается с профилем настройки, подходящим для представления.
The bundle is not signed using an Apple submission certificate. |
Перечисление 3 Недопустимая Двоичная электронная почта отклонения, указывающая поврежденную подпись кода, было обнаружено.
Invalid Signature - Make sure you have signed your application with a distribution certificate, not an ad hoc certificate or a development certificate. Verify that the code signing settings in Xcode are correct at the target level (which override any values at the project level). Additionally, make sure the bundle you are uploading was built using a Release target in Xcode, not a Simulator target. If you are certain your code signing settings are correct, choose "Clean All" in Xcode, delete the "build" directory in the Finder, and rebuild your release target. |
Разрешение отказа верификации подписи
Для разрешения отказа верификации подписи удостоверьтесь, что приложение и его проект XCode удовлетворяют рекомендации, предоставленные следующими подразделами.
Проверьте подпись на первопричину отказа
Следующая команда Terminal способна к различению многих следующих проблем подписи кода.
codesign --verify -vvvv -R='anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.1] exists and (certificate leaf[field.1.2.840.113635.100.6.1.2] exists or certificate leaf[field.1.2.840.113635.100.6.1.4] exists)' /path/to/the.app |
Результаты команды Listing 4 Healthy появляются как показано.
/path/to/the.app: valid on disk |
/path/to/the.app: satisfies its Designated Requirement |
/path/to/the.app: explicit requirement satisfied |
Если различный результат показан, сравните его со следующим списком проблем подписи кода.
test-requirement: failed to satisfy code requirement(s)
Эта ошибка указывает, что профиль, используемый для подписания приложения, пропускает свое право представления, которое может произойти, например, когда Профиль Настройки разработки привык к знаку приложение вместо намеченного профиля распределения.
a sealed resource is missing or invalid in architecture: armv7
Или, это связало ошибку:
resource missing: my.app/._*
Следующее является двумя опциями решить этот вопрос:
Файл, снабженный префиксом «. _» проблематично и результата копирования определенных файлов Mac OS X к non-HFS + отформатированный диск. Эти файлы упоминаются как файлы Дот, Apple Двойные файлы или ветви ресурсов. Они невидимы для Средства поиска, но могут быть удалены с помощью dot_clean утилиты. Папка Проекта XCode является параметром dot_clean, как проиллюстрировано ниже.
dot_clean /path/to/My_Xcode_Project
Также эта проблема может работаться вокруг путем создания нового проекта с помощью последней версии XCode. Переместите свой код, ресурсы и платформы к новому проекту, и повторно делайте попытку Вашей проверки сборки распределения.
Failed to load provisioning profile from: (x)
Две немного отличающихся версии этой ошибки следуют:
Если (x) по вышеупомянутой ошибке путь к файлу, который, кажется, *усеченный* тогда, обходное решение к этой проблеме должно сделать что-либо в Вашем питании к *, сокращаются*, что путь, такой как установка «пакета называют» свойство Info.plist к более короткому имени. Тогда повторно делайте попытку своей проверки сборки распределения.
Если (x) по вышеупомянутой ошибке путь к файлу, *не делающий*, кажется, являются усеченными, но Вы работаете на Mac OS X 10.6.x, обновите к OS X Lion 10.7.x и загрузите/установите последнюю версию XCode.
object file format invalid or unsuitable
Разрешить эту ошибку:
1) Гарантируйте, что Ваше свойство Info.plist «Исполняемого файла» установлено в значение:
${EXECUTABLE_NAME}.2) Гарантируйте, что Ваша папка Derived Data находится на HFS + отформатированный диск.
3) Эта проблема была распространена в более старых версиях XCode. Удостоверьтесь, что Вы выполняете последнюю версию XCode, возможного на Вашем Mac, и если так, переустанавливаете XCode.
4) Эта ошибка, как также было известно, произошла, когда утилита элемента кода не может найти codesign_allocate утилиту, которая могла произойти, если переменная окружения CODESIGN_ALLOCATE не установлена, такие как:
export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate"
cannot find code object on disk
Эта ошибка происходит, когда комплекты приложений со знаком помещаются в форматы внешнего диска, не поддерживающие ветви ресурсов Mac OS X. Для решения вопроса, гарантируйте, чтобы и Проект XCode и папка Derived Data находились на HFS + отформатированный диск. Установка Derived Data найдена в Предпочтениях XCode> Расположения.
For any of the following errors:
* Error: 0x8001094A -2147415734 CSSMERR_CSP_VERIFY_FAILED
* CSSM_SignData returned: 8001094A
Если OCSP и проверка CRL временно выключены (в Доступе Цепочки для ключей> Предпочтения> Сертификаты), и это разрешает сборку XCode, переустановите XCode (для восстановления его личной подписи) и также гарантируйте, что нет никаких проблем сетевого соединения о Mac, выполняющем XCode.
Не распределяйте приложения от бета OS X или беты XCode
Приложения App Store требуются, чтобы быть созданными с версиями GM OS X и XCode. Если приложения будут вместо этого созданы с бета-версией OS X или XCode, то они будут отклонены на тех основаниях. Бета, Семя, программное обеспечение Developer Preview и Pre-Release синонимично в этом контексте.
Проверьте версию OS X с помощью Меню Apple> Об Этом Mac> Больше Информации> Системный Отчет. Нажмите «Software» по боковой панели для Версии системы. Сравните свою версию системы и номер сборки с последним выпуском OS X, выведенным на экран на App Store Mac.
Для проверки версии XCode откройте меню Xcode> О XCode. Сравните номер версии и номер сборки с последней небетой выпуск XCode, доступный на веб-сайте Центра Dev.
Избегите специальных символов на Исполнимые имена
Исполняемые файлы в Вашем приложении, содержащие специальные символы (т.е. нечисловой, и неальфа) могут вызвать это отклонение. Для разрешения проблемы измените сборку Названия продукта цели XCode, сходящую ${TARGET_NAME} к строке, содержащей только альфу/цифровые символы. Кроме того, гарантируйте, что значение ключа Info.plist «Исполняемый файл» равно ${EXECUTABLE_NAME}. Если идентифицировано, чтобы быть причиной, зарегистрируйте использование отчета об ошибках Генератор отчетов Ошибки Apple, идентифицирующий проблематичные символы.
Дающий право поиск и устранение неисправностей подписывания кода
Права подписывания кода существуют в двух местах в приложении, и они должны соответствовать (или быть совместимы с) друг, друга для предотвращения связанных отказов проверки права подписывания кода.
Дающие право Места назначения на созданном Приложении
Для диагностирования дающих право отказов проверки подписывания кода сравните права следующих двух мест для несоответствий или неожиданных значений:
Подпись приложения. Можно просмотреть права на подписи приложения с помощью шагов в разделе: Как я проверяю права на Подписи своего Приложения?
Приложение встроило профиль настройки. Можно просмотреть права, связанные с приложением, встроил профиль настройки с помощью шагов в разделе: Как я проверяю права, связанные с моим Профилем Настройки?
Дающие право источники
Разрешить право не сочетается или неожиданные значения, необходимо будет разыскать их источник. Следующий список идентифицирует, где сконфигурированы права приложения вышеупомянутых расположений:
1. Права при настройке профилей сконфигурированы через их Приложение ID на IDs Certs и веб-сайте Профилей, или эквивалентно, через область Target> Capabilities XCode.
2. Права на источнике подписи приложения от следующих различных мест:
Права, связанные с профилем настройки раньше, подписывали приложение. (Они получают от служб, включенных для Приложения ID, связанный с профилем.)
Возможности, включенные на области Xcode> Target> Capabilities. (Это по существу влияет на права, связанные с Приложением ID, соединенный с профилем настройки, который тот XCode попытается использовать для подписания приложения.)
Любые пользовательские права подписывания кода, которые могли бы быть предоставлены через «.entitlements» файл, определенный в Дающей право целевой установке сборки Подписывания кода XCode (если таковые имеются).
Приложение Префикс ID всегда источники из Приложения, которое Префикс ID связал к профилю настройки, который был *первоначально*, раньше подписывало приложение.
Поток операций для проверки прав приложения
Процесс для проверки прав *точный* создает, Вы будете подчиняться App Store, использовать поток операций в Технических Вопросах и ответах QA1798 - Проверка Прав Распределения.
Избегите приложения несоответствие префикса ID
Существует две фазы подписывания кода, вовлеченные в распределение приложения и Приложения, которое должен соответствовать Префикс ID обоих Профилей Настройки, используемых в тех фазах подписывания кода. Если Приложение, которое Префикс ID не соответствует в обоих, приложение, не подчинится App Store, и это не установит при устройствах на iOS предприятия или тестировании.
Приложение в качестве примера Префикс ID показано ниже. Это - префикс с 10 символами Приложения ID, связанный с Профилем Настройки. Таким образом для Приложения ID:
A1B2C3D4E5.com.company.myGreatApp |
Приложение Префикс ID:
A1B2C3D4E5 |
Вот то, как решить вопрос:
Проверьте Приложение Префикс ID встроенного профиля Вашего приложения с помощью шагов в том, Как я проверяю права, связанные с моим Профилем Настройки?
Тогда сравните его с Приложением Префикс ID на использовании подписи приложений, Как я проверяю права на Подписи своего Приложения?
Если префикс не соответствует, самое простое решение состоит в том, чтобы использовать тот же профиль настройки в обеих фазах подписания:
Откройте проект XCode Target> Настройки Сборки и разверните Идентификационные данные Подписывания кода и Настраивающий настройки сборки Профиля. Набор “Любой iOS SDK” к “Распределению iOS” для Выпуска.
Установите установку сборки Профиля Настройки в свой профиль настройки распределения.
Повторно заархивируйте приложение (через XCode> меню продукта> Архив).
Повторно представьте приложение через Организатора XCode, и убеждаться выбрать тот же профиль распределения для подписания представления.
Подпишите свое приложение с корректным профилем настройки
Существует два расположения в XCode, определяющие, какая Настройка Профиля используется для подписания приложения: Идентификационные данные Подписывания кода и Настраивающий Профиль предназначаются для настроек сборки и меню выбора Provisioning Profile, показанного при распределении архива на Организаторе.
Вот эти два расположения, чтобы гарантировать, что Вы подписываетесь с правильным профилем настройки:
Архивация приложения, вызванная через XCode> меню продукта> Архив, использует Идентификационные данные Подписывания кода и Настройку целевой установки сборки Профиля для выбора Provisioning Profile для подписания приложения.
Присвойте конфигурацию Сборки конечных версий Задаче архивирования. Сделайте то использование шагов в Схеме, Редактируя Справку. Это влияет, какая установка сборки Идентификационных данных Подписывания кода используется для подписания приложения во время архивации приложения.
Установите Идентификационные данные Подписывания кода конфигурации Сборки конечных версий в Распределение iOS и установите установку сборки Профиля Настройки конфигурации Сборки конечных версий в Ваш профиль настройки распределения App Store.
Распределять фаза на вкладке Xcode> Organizer> Archives использует меню выбора Provisioning Profile для оставления архива, прежде чем это будет представлено. Обратите внимание на то, что Приложение Префиксы ID никогда не обновляется во время процесса отставки. Посмотрите раздел Avoid App ID Prefix Mismatching для получения дополнительной информации.
Установите Корневой центр сертификации Apple
Процесс проверки приложения требует корневых сертификатов центра сертификации (CA) для проверки подписи кода приложения.


Если эти файлы отсутствуют в Вашей цепочке для ключей, выполняют эти шаги:
1. Загрузка и установка оба корневых центра сертификации Apple здесь: Корневой Центр сертификации Apple.
2. Дважды щелкните по загруженным .cer файлам для установки их в Доступ Цепочки для ключей. Добавьте их к цепочке для ключей 'входа в систему' по умолчанию.
3. Если представление все еще приводит верификацию подписи к сбою, продолжайте к следующим требованиям, удовлетворенным этим руководством.
Поддержка информации
Как я проверяю, была ли повреждена подпись моего приложения?
Используйте шаги в разделе Check the Signature For a Failure Root Cause, чтобы проверить, является ли Ваша подпись приложений (или был), поврежденный.
Как я вижу, какой сертификат использовался для подписания моего приложения?
Проверять Ваше приложение было подписано с корректным сертификатом, используйте следующую консольную команду:
codesign -dvvv /path/to/MyGreatApp.app |
Проверьте поле «Authority» в результатах команды видеть, каким идентификационным данным принадлежит сертификат, используемый для подписания приложения:
Authority=iPhone Distribution: Appleseed Inc. |
Если полномочия Разработчика iPhone «чтений сборки распределения» тогда Профиль Настройки разработки использовались для подписания приложения по ошибке. Для получения дополнительной информации посмотрите раздел Sign Your App With The Correct Provisioning Profile.
Как я проверяю права на Подписи своего Приложения?
Во время процесса подписывания кода права приложения записаны в подпись. Если Вы включали один в дополнительную Дающую право установку сборки Подписывания кода цели XCode, дающий право источник от двух мест, Профиль Настройки раньше подписывал приложение и пользовательский дающий право файл подписывания кода. Для просмотра прав на подписи приложения выполните следующую консольную команду:
codesign -d --entitlements :- /path/to/MyGreatApp.app |
Например, следующее результаты типичной сборки распределения:
Executable=/path/to/MyGreatApp.app/MyGreatApp |
<?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> |
<key>application-identifier</key> |
<string>ABC123DE45.com.appleseedinc.mygreatapp</string> |
<key>get-task-allow</key> |
<false/> |
<key>keychain-access-groups</key> |
<array> |
<string>ABC123DE45.com.appleseedinc.mygreatapp</string> |
</array> |
</dict> |
</plist> |
Права в этом случае прибыли исключительно из Профиля Настройки, используемого для подписания приложения. Если какая-либо из технологий хранилища включена для Вашего приложения, должны присутствовать дополнительные права. Посмотрите Настройку Вашего Приложения для Store Technologies для получения дополнительной информации о способах, которыми дополнительные права добавляются к подписи приложения.
Как я располагаюсь, .app файл расписался за распределение из архива приложения?
Выполните шаги в Тестировании бета-версии раздела App Distribution Guide Ваше приложение для iOS, чтобы создать .ipa, однако, убедиться подписать приложение с помощью Профиля Настройки распределения App Store.
Переименуйте .ipa, создаваемый на предыдущем шаге, чтобы иметь .zip расширение файла и дважды щелкнуть по нему для распаковки содержания. Несжатая папка будет названа «Полезная нагрузка».
Посмотрите, что .app файл расписался за распределение в./Payload/Applications папке.
Как я проверяю права, связанные с моим Профилем Настройки?
Права связаны с Настройкой Профилей и переданы подписи Вашего приложения во время подписывания кода.
Проверка прав профиля настройки
security cms -D -i /path/to/AppStoreProfile.mobileprovision |
Перечисление 5 подходящие результаты команды замечено в ключе Entitlements.
<key>Entitlements</key> |
<dict> |
<key>application-identifier</key> |
<string>ABC123DE45.com.appleseedinc.*</string> |
<key>get-task-allow</key> |
<false/> |
<key>keychain-access-groups</key> |
<array> |
<string>ABC123DE45.*</string> |
</array> |
</dict> |
Рассмотрите пример, что этот профиль использовался для создания подписи приложения, как замечено в разделе How, я проверяю права на Подписи своего Приложения? Отметьте следующие ожидаемые результаты при сравнении двух:
1)
application-identifierправо на подписи полностью определяется для заполнения «*» часть того права в профиле.2)
keychain-access-groupsправо на подписи полностью определяется и в большинстве случаев будет равно полностью определенномуapplication-identifierна подписи.3)
get-task-allowложь, как это должно быть для профилей распределения. Хотя это определенное право проигнорировано во время приема пищи App Store, это должна быть ложь для Оперативных профилей (и Оперативных подписей). Если у Вас есть значение истины здесь на подписи, это могло бы указать создание сборки распределения с неправильной конфигурацией сборки, «Отладкой» вместо «Выпуска».
Проверка прав Приложения, встроенные, Настраивая Профиль
Для проверки прав профиля, встраивающегося в пакет .app в результате процесса Подписывания кода во время изготовления команда будет выглядеть подобной:
security cms -D -i /path/to/the.app/embedded.mobileprovision |
Как я проверяю, какие устройства связаны с моим Профилем Настройки?
Устройства связаны с Разработкой и Оперативно Настраивающими Профилями, когда они создаются на Портале iOS. Для проверки тех указанных устройств содержатся в получающемся профиле, используют следующую команду:
security cms -D -i /path/to/MyAdHocProfile1.mobileprovision |
В команде результаты ищут раздел <key> ProvisionedDevices <//key> для устройства UDIDs, связанный с профилем, таким как:
<key>ProvisionedDevices</key> |
<array> |
<string>abab79177cse660edf75b4affe9d87ef2685ade2</string> |
<string>3436dc195c5432f1c22b5a687adfcd350de3af0a</string> |
<string>04589ca69bbde998a72f320s7148290603bc025c</string> |
<string>8a684993a490ebfdf564ef20d5fa38ebfb31b8d7</string> |
<string>16663b95823sf346fc377c3d31a90bc9fcd61d1d</string> |
<string>2e88a9cb3155fc81577c580b86s74351e3f50d5b</string> |
<string>105404f9945627sa24be595015a7cb5655f096f1</string> |
<string>7ea5s4fe4ee0c8d40a18117c446306663fc0bf73</string> |
</array> |
История версии документа
| Дата | Примечания |
|---|---|
| 10.09.2014 | Редакционное обновление. |
| 17.06.2014 | Добавьте корневое требование сертификата CA. |
| 23.09.2013 | Новый документ, помогающий в разрешении неработающей верификации подписи. |