Подтвердить что ты не робот

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

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

Являются ли они сертификатами?

Являются ли они закрытыми ключами?

Являются ли они идентификаторами приложений?

Являются ли они профилями подготовки?

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

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

4b9b3361

Ответ 1

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

Терминология CodeSign

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

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

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

Отлично, я понял... Теперь как насчет этого кода? Идентификация?

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

Xcode Code Sign Identity

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

Чтобы быть внимательным, если вы откроете доступ к Keychain Access и дважды щелкните по любому из сертификатов "iPhone Development:..." или "iPhone Distribution:...", отобразится вся информация, закодированная в сертификатах, выпущенные Apple. Разработчики. Если бы я должен был выбрать запись в первом изображении, Xcode попал бы в мою брелок и отменил бы этот сертификат (ПРИМЕЧАНИЕ: уникальные идентификационные данные были X'd или изменены):

Keychain Certificate Common Name Example

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

Оглядываясь назад на настройку Xcode, мы также замечаем, что в этом меню также больше текста. Более светлый серый текст идентифицирует профиль Provisioning Profile, который будет встроен в приложение. В случае установки моего примера Xcode пойдет и получит профиль Provisioning Profile "Тестирование MyiOSApp", у которого его AppID установлен на "com.myiosapp. *". Xcode очень жадна с созданием профилей Provisioning Profiles, и, к счастью, Organizer дает вам отличное место для просмотра профилей Provisioning Profiles, которые установлены и получают представление о базовых данных, которые они содержат. Снова для идентификатора знака кода кода Xcode в первом изображении соответствующий профиль Provisioning Profile в моем организаторе будет выглядеть следующим образом:

Organizer Provisioning Profile

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

Organizer Provisioning Status Options

  • Действительный идентификатор подписи не найден: У вас нет как открытого, так и закрытого ключа для хотя бы одного из сертификатов, закодированных в этом профиле Provisioning Profile. Удалите профиль из Organizer, затем вернитесь к инструменту "Сертификаты, идентификаторы и профили" на сайте developer.apple.com/ios и убедитесь, что ваш сертификат развития включен в профиль Provisioning. Убедитесь, что ваш сертификат в Keychain Access не истек или отозван и имеет закрытый ключ, связанный с сертификатом открытого ключа.
  • Срок действия профиля истек: Истек срок действия профиля предоставления. Удалите этот профиль Provisioning Profile из Organizer, затем перейдите на инструмент Certificates, Identifiers and Profiles на developer.apple.com/ios и переиздайте этот профиль Provisioning Profile (если он действительно нужен)

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

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

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

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

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

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

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

Key Takeaways

  • Удостоверьтесь, что вы сохранили оба списка профилей профилей ключей и Xcode Provicing и дедуплицированы.
  • После установки профиля сертификата и Provisioning Profile убедитесь, что Организатор сообщает, что статус профиля подготовки является зеленым ( "Действительный профиль" ). Любой другой статус указывает на наличие проблемы между вашим ключом и профилем подготовки, который необходимо решить, прежде чем даже подумать о запуске сборки.
  • Попробуйте использовать "Автоматический селектор профилей". Ваши товарищи по команде и любые автоматизированные системы сборки будут более счастливыми с вами, если им тоже не придется думать о настройках идентификатора кодового знака.
  • Если вы не можете использовать автоматический выбор профиля, убедитесь, что вы всегда сохраняете эту настройку актуальной, когда сделаны новые итерации вашего профиля обеспечения.

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