Перевод статьи DEMYSTIFYING IOS PROVISIONING PART 2: CREATING AND ASSIGNING CERTIFICATES AND PROFILES

Перевод первой части здесь

Разрушая мифы iOS Provisioning, часть 2: управление сертификатами и профилями.

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

Наши задачи:

  • создать App ID
  • сгенерировать development and App Store сертификаты
  • создать development и distribution provisioning профили
  • создать схему (назовем ее App Store) в Xcode проекте
  • настроить сертификаты и профили в схеме

Многие задачи выполняются в разделе Provisioning в личном кабинете разработчика на сайте Apple Developer. Provisioning

Если у вас уже есть оплаченный аккаунт, откройте Apple Developer website, выберете “Account” -> “Certificates, Identifiers & Profiles.”

Создание App IDs

App ID это уникальный идентификатор для регистрации вашего приложения. Первым делом, давайте создадим его. App IDs

Шаги для регистрации на сайте apple разрабочика:

  1. Выберите “App IDs” под вкладкой “Identifiers”
  2. Нажмите “+” вверху списка
  3. Введите имя для App ID (используйте название приложения или название + дополнительное имя)
  4. Выберите “Explicit App ID” и введите ваш Bundle ID в текстовое поле
  5. Под “App Services” раздела, выберите сервисы нужные для вашего приложения (их можно будет отредактировать позже)
  6. Нажимаем “Continue”
  7. Если все хорошо - выбираем “Register”

Это все. Bundle ID зарегистрирован и можно генерировать профили на основе этого ID. Если в будущем вы измените Bundle ID, придется также удалить App ID (если он не будет использоваться) и пересоздать новый App ID.

Так, а в чем тогда разница между App ID и Bundle ID? В общем App ID это уникальный идентификатор приложения в экосистеме App Store, не может быть двух приложений там с одинаковыми App ID. Bunlde ID это идентификатор учетной записи разработчика (используется обратная доменная запись - com.mysite.appname).

Создание сертификатов

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

Первое - нужно создать Certificate Signing Request (CSR) в личном кабинете разработчика, для этого:

  1. на вашем Mac откройте Keychain Access (находится тут - /Applications/Utilities).
  2. далее в Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority.
  3. в окне введите ваш email и имя, затем выберите “Save to disk” в опции “Request is”.
  4. жмите Contunue и сохраните файл на компьютере Mac. Certificate Signing Request

Теперь у на есть CSR, и мы готовы сгенерировать рабочий сертификат, для этого заходим в личный кабинет и:

  1. идем в раздел Certificates, Identifiers & Profiles > Certificates > All
  2. нажимаем “+” чтобы создать новый сертификат
  3. выбираем “iOS App Development” для создания development сертификата для отладки на зарегистрированных устройствах
  4. Continue
  5. дальше будут инструкции как сгенерировать CSR (мы уже это сделали!)
  6. загрузите запрос CSR (инструкции прилагаются)
  7. жмем на Download для загрузки сгенерированного сертификата, после этого двойным кликом мышки добавляем его в Keychain Access certificate

Для проверки что сертификат установлен в системе, зайдите в Keychain Access > Login Keychain > Certificate, вы должны увидеть публичный и приватные ключи с префиксом “iPhone Developer” (это значит что сертификат для подписки ios приложений, у сертификатов для Mac приложений будет - “Mac development”).

“App Store and Ad Hoc” сертификаты создаются аналогично (разница в п.3 только), сертификат действителен один год, по окончании срока его нужно удалить и создать новый, при этом все связанные provisioning профили аннулируются и их также придется повторно сгенерировать.

Регистрация устройств

Тестовые устройства для отладки приложений регистрируются в помощью UDID - уникального идентификатора. Он включается в provisioning профили (создадим на следующем шаге), при добавлении/удалении нового устройства нужно повторно сгенерировать provisioning профиль. Поэтому мы сделаем этот шаг первым.

UDID устройства можно найти в iTunes или в Xcode (подключите устройство к Mac запустите Xcode, найдите в Window > Devices > ваше устройство и скопируйте UDID строку в разделе “Identifier”), это уникальный идентификатор вашего физического устройства.

Для регистрации UDID:

  1. идем в Certificates, Identifiers & Profiles > Devices > All (личный кабинет разработчика)
  2. жмем “+” для добавления нового устройства
  3. вводим имя, мы рекомендуем формат для этого “Имя/Тип устройства/Добавлен или Изменен/Дата”, удобно для больший команд
  4. вводим UDID
  5. нажимаем “Contunue” UDID

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

Создание профилей

Provisionig профиль это ключевой момент для подписи приложения. Он определяет какие устройства имеют право запускать подписанное приложение, указывает на сертификат для подписи приложения, а также какие сервисы будут доступны для приложения на этом устройстве (iCloud, APNs и т.д).

Создать provision профиль довольно просто в личном кабинете разработчика, для этого:

  1. идем в Certificates, Identifiers & Profiles > Provisioning Profiles > All и видим список созданных профилей
  2. жмем “+” для добавления нового профиля
  3. выбираем из списка “iOS App Development” и жмем на Continue
  4. далее выберите App ID (созданный ранее) и опять Continue
  5. на этом экране вам предлагают выбрать сертификат для подписи профиля, указываем только что созданный сертификат, и жмем Contunue (можно выбрать несколько сертфикатов для профиля, каждый из них может подписать приложение)
  6. на экране “Select Devices” укажите устройства, на которых вы будете запускать приложение
  7. экран “Generate” предлагает дать профилю читаемое имя, в MartianCraft мы обычно используем формат: [App Name]: [Profile Type] Profile (например “MartianApp: Development Profile”), жмем по привычке Continue
  8. итак на последнем экране (вы тоже не любите неуместное употребление “крайний”?) можно загрузить созданный профиль. После загрузки перетащите его на иконку Xcode в доке (быстрый способ добавить файл в ~/Library/MobileDevice/Provisioning Profiles, это директория для всех профилей, можно сделать это вручную).

Для создания App Store профиля повторяем весь процесс, но на шаге 3 выбираем “App Store”, это профиль для распространия приложений в AppStore, и поэтому в него нельзя добавить устройства.

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

Provisioning profile details

Процесс обновления профиля простой: идем в Certificates, Identifiers & Profiles in the provisioning portal > Provisioning Profiles > All, находим нужный профиль и жмем Edit для изменений App ID, настроек сертификата или списка устройств.

Работа с схемами и сертификатами в Xcode

Наконец-то у нас есть все для подписи iOS приложения, мы соберем все вместе внутри Xcode и свяжем сертификат и provisioning профиль в особую схему.

По умолчанию, XCode автоматически создает две схемы: Debug и Release. Воспользуемся ими, для Debug схемы мы будем использовать Development профиль и сертификат, для Release - AppStore профиль и сертификат. Открываем “General” вкладку и ищем там “targets” (помним что для этого используем сертификаты добавленные в Keychain и Provisioning profiles это папка в XCode см. выше).

Снимаем галочку “Automatically manage signing”, так как мы будем подписывать “самостоятельно”. После этого появятся две секции: “Signing (Debug)” и “Signing (Release).” Manual signing

В Signing (Debug) > Provisioning Profile выставляем Development профиль, а в Signing (Release) - AppStore профиль.

Это все что нужно сделать для работы с профилями в “ручном” режиме. Мне кажется не так уж и сложно :) Теперь можно и поработать.

Частые ошибки и как их исправить

  • Provisioning Profile doesn’t match bundle ID Это значит что provisioning профиль был сгенерирован с неправильным App ID/Bundle ID и профиль содержит Bundle ID от другого проекта.

  • Code Signing Entitlements file do not match those specified in your provisioning profile Локальные права не соответствуют профилю (посмотрите Capabilites вкладку). При добавлении сервисов типа iCloud, Keychain они должны быть зарегистрированы в профиле.

  • No Matching Provisioning Profiles Found случается когда сертификату не имеет связанных профилей для подписи приложений. Проверьте что профиль импортирован в Xcode (можно вручную открыть папку: ~/Library/MobileDevice/Provisioning Profiles), посл этого в личном кабинете убедитесь, что профиль использует необходимый сертификат, в случае необходимости обновите профиль.

Более подробно ошибки описаны на сайте для разработчиков Apple Developer.

Сборка и подпись приложения

С нашими настройками удобно создавать сборки приложения и запускать на зарегистрированных устройствах. Для выпуска приложения под AppStore следует выбрать “Generic iOS Device”, затем Product > Archive, будет создан архив, подписанный профилем-сертификатом “AppStore Provisioning”.

Отправка приложения происходит в Xcode Organizer (Window > Organizer), выбирайте архив для отправки в AppStore и следуйте инструкциям в окне. Не забываем выбрать “Use local signing assets” при выборе команды разработчиков.

Выводы

В этих двух статьях мы рассмотрели все этапы provisioning процесса, для новичков это может показаться непростым делом, к счастью это нужно делать только раз в год и для старта нового проекта. Все коснулись всех базовых моментов provisioning и сборки приложения, если еще остались вопросы, у Apple есть несколько видео с прошлых WWDCC для более глубокого понимания процесса, ссылки ниже.

Ссылки на видео

Спасибо!