Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Установка сертификата Apple в средствах выполнения macOS для разработки в Xcode

Вы можете подписать приложения Xcode в ходе рабочего процесса непрерывной интеграции (CI), установив сертификат подписи кода Apple в GitHub Actions.

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Введение

В этом руководстве показано, как добавить в рабочий процесс непрерывной интеграции (CI) этап, на котором в средствах выполнения GitHub Actions устанавливаются сертификат подписывания кода Apple и профиль обеспечения. Это позволит подписывать приложения Xcode для публикации в Apple App Store или распространения в тестовых группах.

Предварительные требования

Требуются знания YAML и синтаксиса GitHub Actions. Дополнительные сведения см. в разделе:

У вас должно быть представление о создании и подписывании приложений в Xcode. Дополнительные сведения см. в документации Apple для разработчиков.

Создание секретов для сертификата и профиля обеспечения

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

Для применения сертификата и профиля обеспечения в средстве выполнения настоятельно рекомендуется использовать секреты GitHub. Дополнительные сведения о создании секретов и их использовании в рабочем процессе см. в разделе Зашифрованные секреты.

Создайте секреты в репозитории или организации для перечисленных ниже элементов.

  • Сертификат для подписи Apple.

    • Это ваш файл сертификата p12. Дополнительные сведения об экспорте сертификата для подписи из Xcode см. в документации по Xcode.

    • При сохранении сертификата в качестве секрета необходимо преобразовать его в формат Base64. В этом примере секрет называется BUILD_CERTIFICATE_BASE64.

    • Чтобы преобразовать сертификат в формат Base64 и скопировать его в буфер обмена, используйте следующую команду:

      base64 -i BUILD_CERTIFICATE.p12 | pbcopy
  • Пароль сертификата для подписи Apple.

    • В этом примере секрет называется P12_PASSWORD.
  • Профиль обеспечения Apple.

    • Дополнительные сведения об экспорте профиля обеспечения из Xcode см. в документации по Xcode.

    • При сохранении профиля обеспечения в качестве секрета необходимо преобразовать его в формат Base64. В этом примере секрет называется BUILD_PROVISION_PROFILE_BASE64.

    • Чтобы преобразовать профиль обеспечения в формат Base64 и скопировать его в буфер обмена, используйте следующую команду:

      base64 -i PROVISIONING_PROFILE.mobileprovision | pbcopy
  • Пароль цепочки ключей.

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

Добавьте этап в рабочий процесс.

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

YAML
name: App build
on: push

jobs:
  build_with_signing:
    runs-on: macos-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
      - name: Install the Apple certificate and provisioning profile
        env:
          BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
          BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
          KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
        run: |
          # create variables
          CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
          PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
          KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db

          # import certificate and provisioning profile from secrets
          echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
          echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH

          # create temporary keychain
          security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
          security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
          security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH

          # import certificate to keychain
          security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
          security list-keychain -d user -s $KEYCHAIN_PATH

          # apply provisioning profile
          mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
          cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
      - name: Build app
        ...

Обязательная очистка в локальных средствах выполнения

Размещенные на GitHub средства выполнения — это изолированные виртуальные машины, которые автоматически уничтожаются после выполнения задания. Это означает, что сертификаты и профиль обеспечения, используемые в средстве выполнения во время выполнения задания, будут уничтожены вместе со средством выполнения после завершения задания.

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

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

- name: Clean up keychain and provisioning profile
  if: ${{ always() }}
  run: |
    security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
    rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision