Что такое удостоверения подписи кода?


Что такое "идентификаторы подписи кода" в XCode?

Это сертификаты?

это секретные ключи?

это идентификаторы приложений?

Это профили подготовки?

Если я перейду к целевым настройкам сборки, он запрашивает идентификатор подписи кода, поэтому мне нужно это выяснить.

Я думал, что мы подписали код, используя наш закрытый ключ. Однако ни одно из моих имен секретных ключей не появляется. Он показывает список сертификаты (я думаю, хотя я даже не уверен.)

1   51  

1 ответ:

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

Терминология Кодового Дизайна

фаза кодового знака сборки устройства iOS-это процесс с помощью которого мы криптографически подписываем и защищаем определенное расположение данных в приложении, включая сам исполняемый двоичный файл приложения, любые встроенные медиа-активы (например, текстуры кнопок, пользовательские иллюстрации, шрифты и т. д.), а также набор метаданных о нашем приложении и представляет собой уникальный 'отпечаток' данных нашего приложения. Этот отпечаток пальца используется Apple и iOS, чтобы гарантировать, что наши приложения не будут изменены при доставке на устройства пользователя или при запуске на устройствах iOS пользователя. Чтобы сделать это возможным, разработчики должны зарегистрироваться в Apple, настроить идентификатор приложения, запросить сертификаты разработки и распространения, зарегистрировать набор тестовых устройств и, наконец, запросить профиль подготовки для своих усилий по разработке. Роль каждого из этих элементов заключается в следующем:

  • идентификатор приложения (или AppID) - обратная строка DNS-стиля, которая однозначно идентифицирует ровно одно приложение iOS на AppStore.
  • сертификаты разработки и распространения - это цифровые документы, криптографически подписанные Apple, удостоверяющие личность лица, которому были выданы документы. Для тех, кто знаком с инфраструктурой открытых ключей, сам сертификат содержит открытый ключ, который можно использовать для проверки целостности подписей позже в процессе.
  • Тест Устройства - единственное утвержденное стандартное распределение каналы для iOS программного обеспечения осуществляется через AppStore. Зарегистрировав тестовое устройство, разработчики могут обойти AppStore и установить программное обеспечение непосредственно на устройства для целей разработки и тестирования. Общее число тестовых устройств, разрешенных в данном году членства, составляет 100 тестовых устройств.
  • Профиль Подготовки - документ, содержащий три основных компонента: 1) ровно один идентификатор приложения, 2) один или несколько сертификатов разработчика iOS и 3) ноль или более зарегистрированных тестовых устройств на котором может быть непосредственно установлено именованное приложение iOS. Содержание этого документа криптографически подписано Apple, чтобы гарантировать, что его содержимое не может быть подделано.

именно наличие этого файла и проверки отпечатков пальцев определяет, можно ли установить приложение, созданное разработчиком, на устройство, поскольку оно содержит понятие " кто "(сертификаты), " что "(AppID) и " где " (какие устройства).

отлично, я понял...А теперь о чем? эта штука с кодовым знаком идентичности?

в контексте настроек сборки отдельного объекта сборки термин Знак Идентификационный Код относится к общему имени тех сертификатов, которые установлены в связке ключей компьютера разработчика. В настройках сборки Xcode он отображается в виде списка параметров, из которых разработчики должны выбрать идентификатор для использования в CodeSign -- there's много информации, закодированной в каждом разделе меню:

Xcode Code Sign Identity

глядя сначала на черный текст - с изображения выше ' iPhone Developer: Bryan Musial (XXXXXXXXXX)' - это действительно основной элемент Xcode использует для поиска открытых и закрытых ключей, используемых для кодового знака. При выборе этого элемента вы указываете Xcode, чтобы добраться до вашей связки ключей и попытаться найти сертификат, который поле "общее имя" соответствует этой строке, а затем захватить этот сертификат (который содержит открытый ключ) и связанный с ним частный ключ для использования в операции кодового знака.

просто чтобы быть тщательным, если вы открываете доступ к связке ключей и дважды щелкните любой из " iPhone Development:..."или" распределение iPhone: ...'сертификаты показывает всю информацию, закодированную в сертификатах, которые Apple выдает своим разработчикам. Если бы я выбрал запись в первом изображении, Xcode добрался бы до моего брелка и вытащил этот сертификат (Примечание: уникальные идентификационные данные были X'D или изменено):

Keychain Certificate Common Name Example

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

оглядываясь на настройку Xcode снова, мы также замечаем, что в этом выборе меню также есть больше текста-более светлый серый текст идентифицирует профиль подготовки, который будет встроен в приложение. В случае моего примера настройки Xcode пойдет и получит профиль подготовки "Myiosapp Testing", который имеет свой AppID, установленный в 'com.myiosapp.*'. Xcode очень жаден с сохранением профилей подготовки, и, к счастью, Organizer дает вам отличное место для просмотра установленных профилей подготовки и получения представления о базовых данных, которые они содержат. Опять же для идентификатора знака кода Xcode в первом изображении связанный профиль подготовки в моем организаторе будет выглядеть так это:

Organizer Provisioning Profile

столбец " имя " и конец столбца идентификатора приложения соответствуют светло-серому тексту из моей настройки Xcode, поэтому это профиль подготовки, который будет выбран для использования во время знака кода. Также важно отметить столбец "статус" в конце строки. В этом случае он зеленый и указывает на "действительный профиль". Это означает, что мой брелок имеет как открытый, так и закрытый ключи по крайней мере для одного из сертификатов, закодированных в этом Профиль Подготовки. Если этот статус отличается от зеленого, то существует проблема с текущей настройкой открытых / закрытых ключей и / или профиля подготовки -- подпись кода не может работать, если профиль подготовки, который вы пытаетесь использовать, не имеет своего статуса, установленного на зеленый. Другие возможные варианты статуса включают в себя:

Organizer Provisioning Status Options

  • действительное удостоверение подписи не нашел: у вас нет как открытого, так и закрытого ключа хотя бы для одного из Сертификаты, закодированные в этом профиле подготовки. Удалите профиль из органайзера, а затем вернитесь к инструменту сертификаты, идентификаторы и профили developer.apple.com/ios и убедитесь, что Ваш сертификат разработки включен в профиль подготовки. Убедитесь, что срок действия сертификата в Keychain Access не истек и не отменен, а закрытый ключ связан с сертификатом открытого ключа.
  • профиль истек: срок действия профиля обеспечения прошедший. Удалите этот профиль подготовки из органайзера, а затем вернитесь к инструменту сертификаты, идентификаторы и профили developer.apple.com/ios и переиздайте этот профиль подготовки (если он действительно все еще нужен)

другие предметы, которые могут сбить вас с толку

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

предложение 1: при установке новой версии профиля подготовки удалите старые, чтобы Xcode не помещался в положение, в котором ему может потребоваться принять решение.

аналогичная вещь может произойти, если вы переиздаете сертификат разработки или распространения-в большинстве случаев Xcode вызовет предупреждение во время сборки о неоднозначном сертификате.

предложение 2: обратите внимание на предупреждения неясности в построение. Это означает, что у вас есть старый сертификат, плавающий вокруг, который соответствует критериям сборки и может быть непреднамеренно использован, потенциально вызывая проблему сборки.

предложение 3: в любое время, когда вы находитесь в связке ключей, связанной с вашими сертификатами, ищите " iPhone Developer: ..."или" распределение iPhone: ...- сертификаты с красным крестиком на них. Это показатель, что срок действия сертификата истек или был отозван. В любом случае, этот открытый ключ (и потенциально связанный закрытый ключ) больше не используется для целей сборки и может быть удален.

наконец, параметр идентификации кодового знака также имеет опцию, которая отображается как "автоматический выбор профиля". Во многих случаях вы захотите использовать этот параметр, поскольку он будет делать все возможное, чтобы автоматически искать ваш AppID из настроек вашего целевого объекта сборки, искать профиль подготовки, который соответствует этому AppId и содержит сертификаты, для которых у вас есть как открытый, так и закрытый ключ. В некоторые пользовательские обстоятельства сборки может быть невозможно использовать эту опцию, и вам придется использовать один из фиксированных, конкретных параметров, таких как мои настройки демонстрации в первом изображении. Имейте в виду, если вы идете с фиксированной опцией -- каждый раз, когда вы обновляете профиль подготовки, вам нужно будет также обновить параметр сборки удостоверения подписи кода в соответствии с более новой версией.

Ключевые Моменты

  • убедитесь, что вы держите как брелок и Xcode Списки профилей подготовки чистые и дедуплицированные.
  • после установки сертификата и профиля подготовки убедитесь, что организатор сообщает, что статус профиля подготовки Зеленый ("действительный профиль"). Любое другое состояние указывает на наличие проблемы между вашей связкой ключей и профилем подготовки, которую необходимо устранить, прежде чем вы даже подумаете о запуске сборки.
  • попробуйте использовать "автоматический выбор профиля". Ваши товарищи по команде и любые автоматизированные системы сборки будут будьте счастливы с вами, если им тоже не нужно думать о настройках идентификации кода.
  • если вы не можете использовать автоматический выбор профиля, убедитесь, что вы всегда поддерживаете эту настройку в актуальном состоянии по мере создания новых итераций вашего профиля подготовки.

удачи с конфигурацией сборки, и пожалуйста, дайте мне знать если вы имеете любые другие вопросы!