Skip to main content

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

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

Необходимые компоненты

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

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

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

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

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

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

  • Сертификат для подписи 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@v5 - 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 set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $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 # ... 

Примечание.

Для целевых объектов сборки iOS профиль подготовки должен иметь расширение .mobileprovision. Для целевых объектов сборки macOS расширение должно быть .provisionprofile. Приведенный выше пример рабочего процесса должен быть обновлен, чтобы отразить целевую платформу.

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

Размещенные на 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