Skip to main content
ドキュメントには� �繁に更新が� えられ、その都度公開されています。本ページの翻訳はま� 未完成な部分があることをご了承く� さい。最新の情� �については、英語のドキュメンテーションをご参照く� さい。本ページの翻訳に問題がある� �合はこちらまでご連絡く� さい。

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2022-06-03. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてく� さい。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してく� さい。

Xcode 開発用の macOS ランナーに Apple 証明書をインストールする

GitHub Actions ランナーに Apple コード署名証明書をインストールすることで、継続的インテグレーション (CI) ワークフロー内で Xcode アプリケーションに署名できます。

ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情� �を見ることができます。

はじめに

このガイドでは、Apple コード署名証明書とプロビジョニングプロファイルを GitHub Actions ランナーにインストールする継続的インテグレーション (CI) ワークフローにステップを追� する方法を説明しています。 これにより、Xcode アプリケーションに署名して、Apple App Store に公開したり、テストグループに配布したりできるようになります。

必要な環境

YAMLとGitHub Actionsの構文に馴染んでいる必要があります。 詳しい情� �については、以下を参照してく� さい。

Xcode アプリケーションのビルドと署名について理解しておく必要があります。 詳しい情� �については、Apple 開発者ドキュメントを参照してく� さい。

証明書とプロビジョニングプロファイルのシークレットを作成する

署名プロセスには、証明書とプロビジョニングプロファイルの保存、それらのランナーへの転送、ランナーのキーチェーンへのインポート、およびビルドでの使用が含まれます。

ランナーで証明書とプロビジョニングプロファイルを使用するには、GitHub シークレットを使用することを強くお勧めします。 シークレットの作成とワークフローでの使用の詳細については、「暗号化されたシークレット」を参照してく� さい。

次のアイテ� のシークレットをリポジトリまたは Organization に作成します。

  • Apple の署名証明書。

    • これは p12 証明書ファイルです。 Xcode から署名証明書をエクスポートする方法の詳細については、Xcode のドキュメントを参照してく� さい。

    • 証明書をシークレットとして保存する� �合は、証明書を Base64 に変換する必要があります。 この例では、シークレットの名前は BUILD_CERTIFICATE_BASE64 です。

    • 次のコマンドを使用して、証明書を Base64 に変換し、クリップボードにコピーします。

      base64 build_certificate.p12 | pbcopy
  • Apple 署名証明書のパスワード。

    • この例では、シークレットの名前は P12_PASSWORD です。
  • Apple プロビジョニングプロファイル。

    • Xcode からプロビジョニングプロファイルをエクスポートする方法の詳細については、Xcode のドキュメントを参照してく� さい。

    • シークレットとして保存する� �合は、プロビジョニングプロファイルを Base64 に変換する必要があります。 この例では、シークレットの名前は BUILD_PROVISION_PROFILE_BASE64 です。

    • 次のコマンドを使用して、プロビジョニングプロファイルを Base64 に変換し、クリップボードにコピーします。

      base64 provisioning_profile.mobileprovision | pbcopy
  • キーチェーンのパスワード。

    • ランナー上に新しいキーチェーンが作成されるため、新しいキーチェーンのパスワードは任意の新しいランダ� な文字列にすることができます。 この例では、シークレットの名前は KEYCHAIN_PASSWORD です。

ワークフローにステップを追� する

このワークフロー例には、GitHub シークレットから Apple 証明書とプロビジョニングプロファイルをインポートし、それらをランナーにインストールするステップが含まれています。

YAML
name: App build
on: push

jobs:
  build_with_signing:
    runs-on: macos-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - 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 --output $CERTIFICATE_PATH
          echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $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