【Mac 実機不要】GitHub Actions で iOS アプリをビルドする
はじめに
GitHub Actions は、GitHub 上でワークフローを自動化するための機能です。
この記事では、GitHub Actions を使って Mac を持っていなくても iOS アプリをビルドする方法を紹介します。
1. リポジトリーの準備
まずは、iOS アプリのリポジトリーを用意します。
この記事では、以下のようなディレクトリー構造を想定しています。
.
├── .github
│ └── workflows
│ └── build.yml
├── MyApp
│ ├── MyApp.xcodeproj
│ └── ...
└── ...
2. GitHub Actions の設定
リポジトリーのルートディレクトリーに .github/workflows/build.yml
を作成し、以下の内容を記述します。
name: Build
on:
push
jobs:
build:
name: Build
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Archive Project
run: |
xcodebuild archive -project MyApp/MyApp.xcodeproj \
-scheme MainApp \
-sdk iphoneos \
-configuration Release \
-archivePath MainApp.xcarchive \
CODE_SIGNING_ALLOWED=NO
- name: Create ExportOptions.plist
run: |
echo '${{ secrets.EXPORT_OPTIONS }}' > ExportOptions.plist
- name: Create Private Key
run: |
mkdir private_keys
echo -n '${{ secrets.APPLE_API_KEY_BASE64 }}' | base64 --decode > ./private_keys/AuthKey_${{ secrets.APPLE_API_ISSUER_ID }}.p8
- name: Export IPA
run: |
xcodebuild -exportArchive \
-archivePath MainApp.xcarchive \
-exportOptionsPlist ExportOptions.plist \
-exportPath app.ipa \
-allowProvisioningUpdates \
-authenticationKeyPath `pwd`/private_keys/AuthKey_${{ secrets.APPLE_API_ISSUER_ID }}.p8 \
-authenticationKeyID ${{ secrets.APPLE_API_KEY_ID }} \
-authenticationKeyIssuerID ${{ secrets.APPLE_API_ISSUER_ID }}
- name: Upload IPA to App Store Connect
run: |
xcrun altool --upload-app -f app.ipa/MainApp.ipa \
-u ${{ secrets.APPLE_ID }} \
-p ${{ secrets.APP_SPECIFIC_PASSWORD }} \
--type ios
この設定では、xcodebuild
コマンドを使って iOS アプリをビルドし、xcrun altool
コマンドを使って App Store Connect にアップロードしています。
重要なポイントは以下の通りです。
- Xcode プロジェクトのパスは
MyApp/MyApp.xcodeproj
、スキーム名はMainApp
としています。適宜変更してください。 - Xcode のプロジェクトで自動署名を有効にしてください。
-
xcodebuild build
、xcodebuild archive
するときには、署名を無効にするためにCODE_SIGNING_ALLOWED=NO
を指定しています。 - Private Key のパスは内部で暗黙的に参照されるため、変更しないでください。
-
-allowProvisioningUpdates
を指定しているので、プロビジョニングファイルを必要としません。
また、プロビジョニングファイルを 1 年ごとに更新する必要がありません。
3. シークレットの設定
GitHub のリポジトリーの設定画面から、Repository secrets に以下のシークレットを設定します。
詳しい設定方法は、GitHub のドキュメント を参照してください。
-
EXPORT_OPTIONS
:ExportOptions.plist
の内容 -
APPLE_API_KEY_BASE64
: App Store Connect API のキーの内容を Base64 エンコードしたもの -
APPLE_API_ISSUER_ID
: App Store Connect API の Issuer ID -
APPLE_API_KEY_ID
: App Store Connect API のキー ID -
APPLE_ID
: Apple ID -
APP_SPECIFIC_PASSWORD
: Apple ID のアプリ用パスワード
ExportOptions.plist
の作成
EXPORT_OPTIONS
は、以下のような内容です。
YOUR_TEAM_ID
は、Apple Developer Program の Membership から確認できます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>YOUR_TEAM_ID</string>
</dict>
</plist>
App Store Connect API のキーの作成
App Store Connect API のキーは、App Store Connect API から作成できます。
名前は任意ですが、Admin
のアクセスが必要です。
詳しい発行方法は、Apple のドキュメント を参照してください。
APPLE_API_KEY_BASE64
は、キーの内容です。
一度しかダウンロードできないため、注意してください。
Base64 エンコードしてシークレットに設定してください。
Base64 エンコードの方法
以下のコマンドで Base64 エンコードできます。
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes("AuthKey_YOUR_ISSUER_ID.p8"))
base64 -i AuthKey_YOUR_ISSUER_ID.p8
APPLE_API_ISSUER_ID
は、キーの発行者 ID です。
すべてのキーに共通です。
APPLE_API_KEY_ID
は、キー ID です。
ダウンロードしたキーのファイル名の AuthKey_
の後に続く文字列でもあります。
アプリ用パスワードの設定
APPLE_ID
は、Apple ID(メールアドレス)です。
Apple Developer Program の登録に使用した Apple ID を設定してください。
APP_SPECIFIC_PASSWORD
は、Apple ID の アプリ用パスワード から作成したアプリ用パスワードです。
より詳しい設定方法は、Apple のドキュメント を参照してください。
4. 実行
これで準備完了です。
GitHub に push すると、GitHub Actions が自動的に実行されます。
ビルドが成功すると、App Store Connect にアプリがアップロードされます。
App Store Connect から審査不要の内部テスト用リリースを作成することができます。
お手持ちの iPhone でテストしてみてください!
うまくいかないときは
ワークフローが失敗する場合は、以下の点を確認してください。
- Xcode プロジェクトのパスやスキーム名は正しいか。
xcodebuild -list -project MyApp/MyApp.xcodeproj
でスキーム名を確認できます。 - Xcode プロジェクトで自動署名は有効か。
- シークレットはすべて設定されているか。
-
APPLE_API_KEY_BASE64
は Base64 エンコードされているか。 - App Store Connect API のキーの権限は正しいか。
- app.ipa ディレクトリーに
MainApp.ipa
が作成されているか。
プロジェクトによってはほかの名前になることがあります。
ls -l app.ipa
で確認できます。
おわりに
この記事では、GitHub Actions を使って Mac を持っていなくても iOS アプリをビルドする方法を紹介しました。
ぜひお試しください。
Discussion