ノート: 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 証明書とプロビジョニングプロファイルをインポートし、それらをランナーにインストールするステップが含まれています。
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