Что такое идентификация подписи кода?
Что такое "идентификаторы подписи кода" в XCode?
Это сертификаты?
Это закрытые ключи?
Это идентификаторы приложений?
Это профили обеспечения?
Если я перехожу к настройкам целевой сборки, она запрашивает удостоверение подписи кода, поэтому мне нужно это выяснить.
Я думал, что мы подписали код, используя наш закрытый ключ. Однако ни одно из имен моих личных ключей не отображается. Он показывает список сертификатов (я думаю, хотя я даже не уверен.)
2 ответа
Вы определенно натолкнулись на тему, которая очень быстро углубляется и является распространенным источником головной боли при попытке создания устройств iOS-приложений. Во-первых, позвольте мне представить небольшую структуру каждого термина, участвующего в процессе Code Sign (как для вас, так и для любого, кто сталкивается с этим вопросом позже), а затем мы можем перейти к вашему основному вопросу:
CodeSign Терминология
Фаза Code Sign в сборке устройства iOS - это процесс, с помощью которого мы криптографически подписываем и защищаем определенное расположение данных в приложении, включая сам исполняемый двоичный файл приложения, любые встроенные мультимедийные ресурсы (такие как текстуры кнопок, пользовательские изображения, шрифты и т. Д.).), а также набор метаданных о нашем приложении и представляет собой уникальный "отпечаток" данных нашего приложения. Этот отпечаток используется Apple и iOS, чтобы гарантировать, что наши приложения не будут подделаны при доставке на устройства пользователя или при запуске на устройствах iOS пользователя. Чтобы сделать это возможным, разработчики должны зарегистрироваться в Apple, настроить идентификатор приложения, запросить сертификаты разработки и распространения, зарегистрировать набор тестовых устройств и, наконец, запросить профиль обеспечения для своих усилий по разработке. Роль каждого из этих элементов заключается в следующем:
- Идентификатор приложения (или AppID) - обратная строка в стиле DNS, которая однозначно идентифицирует ровно одно приложение iOS в AppStore.
- Сертификаты разработки и распространения - это цифровые документы, криптографически подписанные Apple и удостоверяющие личность человека, которому были выданы документы. Для тех, кто знаком с инфраструктурой открытых ключей, сам сертификат содержит открытый ключ, который можно использовать для проверки целостности подписей на более поздних этапах процесса.
- Тестовые устройства - Единственные утвержденные стандартные каналы распространения для программного обеспечения iOS - через AppStore. Зарегистрировав тестовое устройство, разработчики могут обойти AppStore и установить программное обеспечение непосредственно на устройства для целей разработки и тестирования. Общее количество тестовых устройств, разрешенных в данный год членства, составляет 100 тестовых устройств.
- Профиль обеспечения - документ, содержащий три основных компонента: 1) ровно один идентификатор приложения, 2) один или несколько сертификатов разработчика iOS и 3) ноль или более зарегистрированных тестовых устройств, на которых указанное приложение iOS может быть установлено непосредственно. Содержимое этого документа криптографически подписано Apple, чтобы гарантировать, что его содержимое не может быть подделано.
Именно наличие этого файла и проверка отпечатков пальцев определяют, может ли приложение, созданное разработчиком, быть установлено на устройство, поскольку оно содержит понятия "Кто" (Сертификаты), "Что" (AppID) и "Где". ' (какие устройства).
Отлично, я понял... Теперь, как насчет этой вещи с идентификацией кода?
В контексте параметров сборки отдельной цели сборки термин " идентификация кода" относится к общему имени тех сертификатов, которые установлены в цепочке для ключей на компьютере разработчика. В настройке сборки XCode он отображается в виде списка опций, из которых разработчики должны выбрать Identity для использования для CodeSign - в каждом разделе этого меню содержится много информации, закодированной:
Сначала посмотрим на черный текст - на изображении выше "iPhone Developer: Bryan Musial (XXXXXXXXXX)" - это действительно основной элемент, который Xcode использует для поиска открытых и закрытых ключей, используемых для Code Sign. При выборе этого пункта вы указываете Xcode войти в цепочку ключей и попытаться найти сертификат, поле "Common Name" которого соответствует этой строке, а затем получить этот сертификат (который содержит открытый ключ) и соответствующий закрытый ключ для использования в Кодовый знак операции.
Просто будьте внимательны, если вы откроете Keychain Access и дважды щелкните любой из сертификатов "iPhone Development: ..." или "iPhone Distribution: ...", чтобы показать всю информацию, закодированную в сертификатах, которые Apple выдает своим разработчикам. Если бы я выбрал запись на первом изображении, Xcode попадал в мою цепочку для ключей и возвращал этот сертификат (ПРИМЕЧАНИЕ. Уникальные идентификационные данные были изменены или изменены):
Как вы можете видеть, черный текст из выбора XCode в точности совпадает с полем Common Name в моем сертификате, поэтому XCode отзовет этот сертификат и связанный с ним закрытый ключ для использования в кодах, подписывающих мое приложение.
Оглядываясь назад на настройку Xcode, мы также замечаем, что в этом меню также есть больше текста - светло-серый текст идентифицирует профиль обеспечения, который будет встроен в приложение. В случае моего примера настройки, Xcode пойдет и получит профиль обеспечения "MyiOSApp Testing", у которого его AppID установлен в "com.myiosapp.*". XCode очень жадно хранит профили Provisioning Profiles, и, к счастью, Organizer предоставляет вам отличное место для просмотра установленных профилей Provisioning Profiles и получения представления об основных данных, которые они содержат. Опять же для идентификатора кода Xcode на первом изображении соответствующий профиль обеспечения в моем Организаторе будет выглядеть следующим образом:
Столбец "Имя" и хвостовая часть столбца "Идентификатор приложения" соответствуют светло-серому тексту из настроек моего XCode, так что это профиль обеспечения, который будет выбран для использования во время подписи кода. Также важно отметить столбец "Статус" в конце строки. В этом случае он зеленый и обозначает "Действительный профиль". Это означает, что моя цепочка для ключей имеет как открытый, так и закрытый ключи как минимум для одного из сертификатов, закодированных в этом профиле обеспечения. Если этот статус отличается от зеленого, значит, существует проблема с текущей настройкой открытых / закрытых ключей и / или профиля обеспечения - подпись кода может работать только в том случае, если для профиля обеспечения, который вы пытаетесь использовать, установлен статус Зеленый, Другие возможные варианты состояния включают в себя:
- Действительное удостоверение личности подписи не найдено: у вас нет открытого и закрытого ключей хотя бы для одного из сертификатов, закодированных в этом профиле обеспечения. Удалите профиль из Организатора, затем вернитесь к инструменту "Сертификаты, идентификаторы и профили" на developer.apple.com/ios и убедитесь, что ваш сертификат разработки включен в профиль обеспечения. Убедитесь, что ваш сертификат в Keychain Access не истек или не отозван, и имеет закрытый ключ, связанный с сертификатом открытого ключа.
- Срок действия профиля истек: срок действия профиля обеспечения истек. Удалите этот профиль обеспечения из Организатора, затем повторно посетите инструмент "Сертификаты, идентификаторы и профили" на developer.apple.com/ios и переиздайте этот профиль обеспечения (если он все еще необходим)
Другие предметы, которые могут сбить вас с толку
В дополнение ко всем нюансам, связанным с установкой открытых и закрытых ключей, а также с правильной настройкой профилей обеспечения, есть еще несколько вещей, которые могут сбить с толку разработчиков. Во-первых, XCode собирает профили обеспечения и привязывает их, пока вы не скажете ему удалить их. Теоретически, это не очень большое дело, кроме случаев, когда вы вносите изменения в профиль обеспечения, загружаете и устанавливаете более новую версию. Много раз XCode будет выбирать нужный профиль, но иногда он не получает его правильно, и вы потратите часы на просмотр инструмента "Сертификаты, идентификаторы и профили", а также цепочки для ключей, чтобы попытаться понять, что происходит.
Предложение 1. При установке более новой версии профиля обеспечения, удалите старые, чтобы XCode не оказался в положении, когда ему, возможно, придется принять решение.
Аналогичная ситуация может произойти, если вы переиздаете сертификат разработки или распространения. В большинстве случаев Xcode при сборке выдает предупреждение о неоднозначном сертификате.
Предложение 2: Обратите внимание на предупреждения неоднозначности во время сборки. Это означает, что у вас есть старый сертификат, который соответствует критериям сборки и может быть непреднамеренно использован, что может вызвать проблемы со сборкой.
Предложение 3: Каждый раз, когда вы работаете в связке ключей с вашими сертификатами, ищите сертификаты "iPhone Developer: ..." или "Распространение iPhone:...", на которых есть красный крестик. Это показатель того, что срок действия сертификата истек или был отозван. В любом случае, этот Открытый ключ (и, возможно, связанный Закрытый ключ) больше не используется для целей сборки и может быть удален.
Наконец, параметр "Идентификация кодового знака" также содержит параметр "Автоматический выбор профиля". Во многих случаях вы захотите использовать эту опцию, так как она сделает все возможное, чтобы автоматически найти ваш AppID в настройках целевого объекта сборки, найти профиль обеспечения, соответствующий этому AppId и содержащий сертификаты, для которых у вас есть как открытый, так и закрытый ключ., В некоторых случаях при сборке может быть невозможно использовать эту опцию, и вам придется использовать одну из фиксированных, специфических опций, например мою демонстрационную настройку на первом изображении. Имейте в виду, что если вы используете фиксированную опцию - каждый раз, когда вы обновляете профиль обеспечения, вам также необходимо будет обновить настройку сборки Code Signing Identity, чтобы она соответствовала более новой версии.
Ключевые вынос
- Убедитесь, что ваши списки ключей и профиля обеспечения Xcode чистые и дедуплицированные.
- После установки сертификата и профиля обеспечения убедитесь, что Организатор сообщает, что состояние профиля обеспечения имеет зеленый цвет ("Действительный профиль"). Любой другой статус указывает на наличие проблемы между цепочкой для ключей и профилем обеспечения, которую необходимо устранить, прежде чем вы даже подумаете о запуске сборки.
- Попробуйте использовать "Автоматический выбор профиля". Ваши товарищи по команде и любые автоматизированные системы сборки будут счастливее с вами, если им тоже не придется задумываться о настройках Code Sign Identity.
- Если вы не можете использовать автоматический выбор профиля, убедитесь, что вы постоянно обновляете его, так как выполняются более новые итерации вашего профиля обеспечения.
Удачи в настройке сборки, и, пожалуйста, дайте мне знать, если у вас есть другие вопросы!
Вы можете подписать свое приложение только сертификатом.
Этот сертификат либо:
- сертификат разработчика (сборка из Xcode на ваше физическое устройство)
- корпоративный сертификат (сборка для сотрудников)
- сертификат магазина приложений (создается для реальных клиентов)
Ниже перечислены сертификаты, доступные на вашем Mac для подписи.
security find-identity -p codesigning -v
Пример моего возврата:
1) A0D1B4FBH9768DA909766DC27D6882088A994473 "Apple Development: Mohammad F (5ABCS7TRT6)"
2) 5404044732CF2A011D95C28222DCF0000D3B84E "Apple Development: mfaani@foo.com (97ENL333NA)"
Мои два сертификата могут быть идентифицированы либо:
A0D1B4FBH9768DA909766DC27D6882088A994473 ИЛИ «Разработка Apple: Мохаммад Ф (5ABCS7TRT6»
5404044732CF2A011D95C28222DCF0000D3B84E ИЛИ «Apple Development: [электронная почта защищена] (97ENL333NA)»
Резюме
Идентификатор подписи кода — это все, что может однозначно идентифицировать ваш сертификат.