Подписывайте мобильное приложение

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

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

Совет

Используйте агент сборки Linux, macOS или Windows, размещенный корпорацией Майкрософт, или настройте собственный агент. См. статью "Агенты сборки и выпуска".

В этой статье рассматриваются следующие вопросы:

Подписыв приложение Android

Выполните следующие действия, чтобы подписать приложение Android при сохранении безопасности сертификата подписи:

  1. Сначала получите файл хранилища ключей, содержащий сертификат подписи. В документации по Android описывается процесс создания файла хранилища ключей и соответствующего ключа.

  2. Создайте конвейер сборки из шаблона сборки Android или Xamarin.Android. Или, если у вас уже есть конвейер сборки, добавьте задачу подписывания Android после задачи, которая создает APK.

  3. Найдите задачу подписывания Android в папке APK проверка box и включите ее.

  4. Рядом с полем файла хранилища ключей щелкните значок параметров и отправьте файл хранилища ключей в библиотеку Secure Files. Во время отправки хранилище ключей будет зашифровано и безопасно сохранено.

  5. После отправки хранилища ключей в библиотеку безопасных файлов выберите его в раскрывающемся списке файла хранилища ключей.

  6. Перейдите на вкладку "Переменные" и добавьте следующие переменные. В столбце "Значение" введите пароль хранилища ключей, псевдоним ключа и пароль ключа.

    • keystore-password: пароль для незашифрованного файла хранилища ключей. Не забудьте выбрать значок блокировки . Это позволит защитить пароль и скрыть его в журналах.

    • псевдоним ключа: псевдоним ключа для созданного сертификата подписи.

    • key-password: пароль для ключа, связанного с указанным псевдонимом. Опять же, обязательно выберите значок блокировки .

      Переменные подписывания Android

  7. Вернитесь на вкладку "Задачи " и найдите имена только что созданных переменных в параметрах подписывания.

    Входные значения для подписывания Android

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

Подписывайте приложение Apple iOS, macOS, tvOS или watchOS

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

Получение сертификата подписи P12

После создания сертификата подписи разработки или распространения экспортируйте его в .p12 файл с помощью Xcode или приложения Keychain Access в macOS.

  1. Чтобы экспортировать с помощью Xcode 8 или более поздней версии, перейдите в раздел "Параметры Xcode...>>Учетные записи и выберите учетную запись разработчика Apple.

  2. Выберите "Просмотреть сведения...", щелкните правой кнопкой мыши удостоверение подписи, которое вы хотите экспортировать, и выберите "Экспорт...".

  3. Введите имя файла и пароль. Запишите пароль, так как вам потребуется позже.

    Сертификат экспорта Xcode

  4. Кроме того, выполните аналогичный процесс с помощью приложения Keychain Access в macOS или создайте сертификат подписи в Windows. Используйте процедуру , описанную в этой статье , если вы предпочитаете этот метод.

Получение профиля подготовки

Профиль подготовки приложений можно скачать на портале разработчика Apple, если приложение не использует автоматическую подпись. Узнайте, как скачать профиль подготовки на портале разработчика Apple.

Вы также можете использовать Xcode для доступа к тем, которые установлены на компьютере Mac.

  1. С помощью Xcode 8 или более поздней версии перейдите к настройкам Xcode...>>Учетные записи и выберите учетную запись разработчика Apple.

  2. Щелкните правой кнопкой мыши профиль подготовки, который вы хотите использовать, и выберите "Показать" в Finder.

  3. Скопируйте выделенный файл из Finder в другое расположение и присвойте ему описательное имя файла.

    Xcode Show in Finder

Настройка сборки

Для сборки рекомендуется получить доступ к сертификатам подписи и профилям подготовки для подписывания и подготовки приложения:

  1. Установка их во время сборки
  2. Предварительная установка их в агенте сборки macOS

Для получения сведений выберите любой из приведенных ниже вкладок.

Используйте этот метод, если у вас нет постоянного доступа к агенту сборки, например размещенным агентам macOS. Сертификат P12 и профиль подготовки устанавливаются в начале сборки и удаляются после завершения сборки.

Установка сертификата P12 во время сборки

Визуальный редактор
  1. Добавьте задачу установки сертификата Apple в сборку перед задачей Xcode или Xamarin.iOS.
  2. Рядом с полем "Сертификат" (P12) выберите значок параметров и отправьте P12-файл в библиотеку безопасных файлов. Во время отправки сертификат будет зашифрован и безопасно сохранен.
  3. После отправки сертификата в библиотеку безопасных файлов выберите его в раскрывающемся списке Сертификат (P12).
  4. Перейдите на вкладку "Переменные" и добавьте переменную с именем P12password. Задайте для его значения пароль сертификата. Не забудьте выбрать значок блокировки . Это позволит защитить пароль и скрыть его в журналах.
  5. Вернитесь на вкладку "Задачи ". В параметрах задачи "Установить сертификат Apple" наведите ссылку на только что созданную переменную в поле пароля сертификата (P12): $(P12password)
Пример YAML
  1. Отправьте P12-файл в библиотеку Безопасных файлов. Во время отправки сертификат будет зашифрован и безопасно сохранен.

  2. Перейдите на вкладку "Переменные" и добавьте переменную с именем P12password. Задайте для его значения пароль сертификата. Не забудьте выбрать значок блокировки . Это позволит защитить пароль и скрыть его в журналах.

  3. Добавьте задачу установки сертификата Apple в YAML перед задачей Xcode или Xamarin.iOS:

    - task: InstallAppleCertificate@2
        inputs:
          certSecureFile: 'my-secure-file.p12' # replace my-secure-file.p12 with the name of your P12 file.
          certPwd: '$(P12password)'
    

Установка профиля подготовки во время сборки

Визуальный редактор
  1. Добавьте задачу "Установить профиль подготовки Apple" в сборку перед задачей Xcode или Xamarin.iOS.
  2. Для параметра расположения профиля подготовки выберите безопасные файлы (в YAML, secureFiles).
  3. Рядом с полем профиля подготовки выберите значок параметров и отправьте файл профиля подготовки в библиотеку Secure Files. Во время отправки сертификат будет зашифрован и безопасно сохранен.
  4. После отправки сертификата в библиотеку безопасных файлов выберите его в раскрывающемся списке профиля подготовки.
  5. Включите профиль проверка box с меткой Remove после сборки. Это гарантирует, что профиль подготовки не остается на компьютере агента.
Пример YAML
  1. Отправьте профиль подготовки в библиотеку Secure Files. Во время отправки сертификат будет зашифрован и безопасно сохранен.

  2. Добавьте задачу "Установить профиль подготовки Apple" в YAML перед задачей Xcode или Xamarin.iOS:

    - task: InstallAppleProvisioningProfile@1
        inputs:
          provProfileSecureFile: 'my-provisioning-profile.mobileprovision' # replace my-provisioning-profile.mobileprovision with the name of your provisioning profile file.
    

    [ПРИМЕЧАНИЕ] Удалите профиль после сборкипо умолчанию для true.

Ссылка на файлы в задаче Xcode

Визуальный редактор
  1. Выберите задачу Xcode.
  2. Для параметра "Стиль подписывания" выберите "Подписывание вручную".
  3. В поле "Удостоверение подписывания" введите $(APPLE_CERTIFICATE_SIGNING_IDENTITY). Эта переменная автоматически устанавливается задачей установки сертификата Apple для выбранного сертификата.
  4. В поле UUID профиля подготовки введите $(APPLE_PROV_PROFILE_UUID). Эта переменная автоматически устанавливается задачей "Установить профиль подготовки Apple" для выбранного профиля подготовки.
Пример YAML
- task: Xcode@5
  inputs:
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'

Ссылка на файлы в задаче Xamarin.iOS

Визуальный редактор
  1. Выберите задачу Xamarin.iOS.
  2. Для параметра "Переопределение" выберите идентификаторы.
  3. В поле "Удостоверение подписывания" введите $(APPLE_CERTIFICATE_SIGNING_IDENTITY). Эта переменная автоматически устанавливается задачей установки сертификата Apple для выбранного сертификата.
  4. В поле UUID профиля подготовки введите $(APPLE_PROV_PROFILE_UUID). Эта переменная автоматически устанавливается задачей "Установить профиль подготовки Apple" для выбранного профиля подготовки.
Пример YAML
- task: XamariniOS@2
    inputs:
      solutionFile: '**/*.iOS.csproj'
      signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
      signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'

Сохраните конвейер сборки, и все задано! Теперь агент сборки сможет безопасно подписать и подготовить приложение.

Вопросы и ответы

Нужен ли мне агент?

Для выполнения сборки или выпуска необходим по меньшей мере один агент.

У меня возникли проблемы. Как их устранить?

См. раздел Устранение неполадок со сборками и выпусками.

Мне не удается выбрать пул агентов по умолчанию, и я не могу поставить сборку или выпуск в очередь. Как это устранить?

См. Пулы агентов.

Задача отправки NuGet завершается со следующей ошибкой: "Ошибка: не удается получить сертификат локального издателя". Как это исправить?

Это можно исправить, добавив доверенный корневой сертификат. Можно либо добавить переменную среды NODE_EXTRA_CA_CERTS=file в агент сборки либо добавить переменную задачи NODE.EXTRA.CA.CERTS=file в конвейер. Дополнительные сведения об этой переменной см. в документации по Node.js. Инструкции по настройке переменной в конвейере см. в разделе Настройка переменных в конвейере.

Я использую Team Foundation Server локально и не вижу некоторые из этих функций. Почему?

Некоторые из этих функций доступны только в Azure Pipelines и пока недоступны в локальной среде. Некоторые функции доступны в локальной среде, если вы выполнили обновление до последней версии Team Foundation Server.