注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。
はじめに
このガイドでは、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