Бөлісу құралы:


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

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

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

Примечание.

Для запуска сборки или выпуска требуется по крайней мере один агент. Вы можете использовать размещенный корпорацией Майкрософт агент сборки Linux, macOS или Windows или настроить собственный агент. Дополнительные сведения см. в разделе "Сборка и выпуск агентов".

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

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

Отправка файла хранилища ключей

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

  2. В Azure Pipelines перейдите в библиотеки>Secure files. Выберите +Безопасный файл и отправьте файл хранилища ключей в библиотеку безопасных файлов. Во время отправки хранилище ключей шифруется и безопасно хранится.

Добавление задачи подписывания в конвейер

Добавьте задачу AndroidSigning@3 в конвейер YAML после шага, который создает приложение. В задаче:AndroidSigning@3

  • <apkFiles> является обязательным и является путем и именами подписанных ФАЙЛОВ APK. Значение по умолчанию — **/*.apk.
  • <apksign> должен быть true, который является значением по умолчанию.
  • <keystore-file> — имя отправленного файла хранилища ключей в библиотеке защищенных файлов.
  • <apksignerKeystorePassword> — это пароль для незашифрованного файла хранилища ключей.
  • <apksignerKeystoreAlias> — это псевдоним ключа для сертификата подписи.
  • <apksignerKeyPassword> — это пароль для ключа, связанного с указанным псевдонимом.

Можно задать и использовать переменные в YAML или задать переменные с помощью вкладки "Переменные " в пользовательском интерфейсе Azure Pipelines и ссылаться на них в YAML.

variables:
  keystore-password: <keystore file password>
  key-alias: <key alias for the signing certificater>
  key-password: <password for the key associated with the alias>

steps:
- task: AndroidSigning@3
  displayName: 'Signing and aligning APK file(s) **/*.apk'
  inputs:
    apkFiles: '**/*.apk'
    apksign: true
    apksignerKeystoreFile: <keystore-filename.keystore>
    apksignerKeystorePassword: $(keystore-password)
    apksignerKeystoreAlias: $(key-alias)
    apksignerKeyPassword: $(key-password)

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

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

Чтобы подписать и подготовить приложение, сборка Xcode или Xamarin.iOS должна иметь доступ к сертификату подписи P12 и одному или нескольким профилям подготовки. Ниже описано, как получить эти файлы.

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

  1. Экспортируйте сертификат подписи разработки или распространения в P12-файл с помощью Xcode или приложения Keychain Access в macOS.

    • Экспорт с помощью Xcode:

      1. Перейдите к учетным записям параметров>Xcode>.

      2. В левом столбце выберите идентификатор Apple ID.

      3. В правой части выберите личную или командную учетную запись и выберите пункт "Управление сертификатами".

      4. Ctrl+Select the certificate you to export and select Export certificate from the menu.

        Снимок экрана: экспорт сертификата с помощью Xcode.

      5. В диалоговом окне введите имя сертификата, расположение для сохранения файла и пароль для защиты сертификата.

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

  2. Отправьте P12-файл в библиотеку защищенных файлов Azure Pipelines. Во время отправки сертификат шифруется и безопасно хранится.

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

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

Если приложение не использует автоматическую подпись, вы можете скачать профиль подготовки приложений на портале разработчика Apple. Дополнительные сведения см. в разделе "Изменение, скачивание и удаление профилей подготовки".

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

В Azure Pipelines отправьте профиль подготовки в библиотеку защищенных файлов. Во время отправки файл шифруется и безопасно хранится.

Добавление задач подписи и подготовки в конвейер

Чтобы подписать и подготовить приложение, можно установить сертификат и профиль во время каждой сборки или предварительно установить файлы в агенте сборки macOS.

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

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

  • Добавьте задачу InstallAppleCertificate@2 в конвейер YAML перед задачей Xcode или Xamarin.iOS. В коде замените <secure-file.p12> имя отправленного P12-файла . Используйте переменную для безопасного P12password.

    - task: InstallAppleCertificate@2
        inputs:
          certSecureFile: '<secure-file.p12>'
          certPwd: '$(P12password)'
    

    Примечание.

    InstallAppleCertificate@2 В задаче deleteCert параметр по умолчанию trueудаляет сертификат после сборки.

  • Добавьте задачу InstallAppleProvisioningProfile@1 в YAML перед задачей Xcode или Xamarin.iOS. Замените <secure-file.mobileprovision> именем файла профиля подготовки.

    - task: InstallAppleProvisioningProfile@1
        inputs:
          provProfileSecureFile: '<secure-file.mobileprovision>'
    

    Примечание.

    InstallAppleProvisioningProfile@1 В задаче removeProfile параметр по умолчанию trueудаляет профиль после сборки.

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

Предварительная установка сертификата и профиля в агенте сборки macOS

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

Предустановка сертификата P12

  1. Чтобы установить сертификат P12 в цепочке ключей по умолчанию, выполните следующую команду из окна терминала macOS в агенте сборки. Замените <certificate.p12> путь и имя файла P12. Замените <password> пароль шифрования P12-файла.

    sudo security import <certificate.p12> -P <password>
    
  2. Добавьте новую переменную в конвейер с именем KEYCHAIN_PWD. Задайте значение в качестве пароля цепочку ключей по умолчанию, которая обычно является паролем для пользователя, запускающего агент. Не забудьте выбрать значок блокировки , чтобы защитить этот пароль.

Предварительная настройка профиля подготовки

  1. Найдите полное имя удостоверения подписи, открыв окно терминала macOS и введя security find-identity -v -p codesigningего. Вы увидите список удостоверений подписывания в форме iPhone Developer/Distribution: Developer Name (ID). Если удостоверение недопустимо, вы увидите что-то подобное (CSSMERR_TP_CERT_REVOKED) после удостоверения.

  2. Чтобы установить профиль подготовки на компьютере агента, выполните следующую команду из окна терминала macOS. Замените <profile> путь к файлу профиля подготовки и замените <UUID> идентификатором UUID профиля подготовки, который является именем файла профиля подготовки без .mobileprovision расширения.

    sudo cp <profile> ~/Library/MobileDevice/Provisioning Profiles/<UUID>.mobileprovision
    

Добавление задач подписи и подготовки, использующих цепочку ключей по умолчанию

  • Добавьте задачу InstallAppleCertificate@2 в конвейер YAML перед задачей Xcode или Xamarin.iOS. В коде задайте следующие значения:

    • certSecureFile: имя отправленного P12-файла .
    • certPwd: переменная для безопасной P12password.
    • signingIdentity: полное имя удостоверения подписи.
    • keychain: default, чтобы разрешить доступ к цепочке ключей по умолчанию.
    • keychainPassword: переменная KEYCHAIN_PWD .
    • deleteCert: false, чтобы сохранить сертификат между сборками.
    - task: InstallAppleCertificate@2
      inputs:
        certSecureFile: '<secure-file.p12>'
        certPwd: '$(P12password)'
        signingIdentity: <full-signing-identity>
        keychain: default
        keychainPassword: `$(KEYCHAIN_PWD)
        deleteCert: false
    
  • Добавьте задачу InstallAppleProvisioningProfile@1. В коде:

    • Задайте provProfileSecureFile имя файла профиля подготовки.
    • Задайте для removeProfile false этого профиль, который сохраняется между сборками.
    - task: InstallAppleProvisioningProfile@1
        inputs:
          provProfileSecureFile: '<secure-file.mobileprovision>'
          removeProfile: false
    

Агент сборки macOS теперь может безопасно подписать и подготовить приложение для всех сборок без дальнейшего управления сертификатами или профилями.

Ссылка на защищенные файлы в задаче сборки Xcode или Xamarin.iOS

Чтобы использовать безопасный сертификат и профиль в конвейерах, настройте следующие параметры в задачах сборки Xcode или Xamarin.iOS.

Ссылки на безопасные файлы в задачах сборки используют переменные для signingIdentity и provisioningProfileUuid. Эти переменные автоматически задаются задачами "Установить сертификат Apple" и установить профиль подготовки Apple для выбранного сертификата и профиля подготовки.

Для Xcode:

- task: Xcode@5
  inputs:
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'

Для Xamarin.iOS:

- task: XamariniOS@2
    inputs:
      solutionFile: '**/*.iOS.csproj'
      signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
      signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'

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

Ознакомьтесь также с информацией по смежным темам: