はじめに
iOSアプリのビルドやApp Store Connectへの配信を自動化する際には、Fastlaneを利用するケースが多いかと思います。Fastlaneは大変便利なツールですが、Rubyを導入したりBundlerでバージョンを管理したりと環境構築が少し面倒と感じる事があるかと思います。
そこで、本記事ではFastlaneを使わずにXcodeに付随するxcodebuild
コマンドだけでiOSアプリのビルド・配信を行う方法を説明します。
環境
- Xcode14.3.1 (14E300c)
手順
1. Releaseビルドの署名設定をAutomaticにする
本記事ではXcode13から導入されたcloud signingを利用するため、Releaseビルドの署名設定を「Automatically manage signing」に設定してください。
※cloud signing については、こちらの記事を参考にしてください。
2.App Store ConnectでAPIキーを作成する
xcodebuild
コマンドからcloud signingによる署名、App Store Connectへの配信を行うために必要なAPIキーを作成します(ロールはAdminで作成してください)。
- 作成したAPIキーはプロジェクトのルートディレクトリなどに設置してください
- gitなどのバージョン管理ツールには含めないように注意
- GitHub ActionsなどのCIサービスから利用する場合は、Secretsに登録しておいてビルド前のステップで復元するなどの対応が必要
- IssuerID、キーIDも
xcodebuild
コマンドのオプションとして指定する必要があるので控えておいてください
3. ExportOptions.plistを作成する
Archivesファイルをipaファイルにエクスポートする際の設定を記載したExportOptions.plistを作成し、プロジェクトのルートディレクトリなどに設置してください。
下記に最低限必要な設定を記載したサンプルはこちら。他のkeyについては$ xcodebuild -help
で確認できるので、必要に応じて追記ください。
<?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>destination</key>
<string>upload</string>
<key>manageAppVersionAndBuildNumber</key>
<true/>
<key>method</key>
<string>app-store</string>
<key>signingStyle</key>
<string>automatic</string>
</dict>
</plist>
4. ビルド用スクリプトを作成する
xcodebuild
コマンドを用いてビルド・配信を行うには、Archivesファイルの作成・ipaファイルのエクスポートの2ステップが必要になるため、それらを記述したシェルスクリプトを作成します。
#!/bin/bash
readonly ARCHIVE_PATH=<任意のアーカイブ出力先>
readonly IPA_PATH=<任意のipa出力先>
# generate achive
xcodebuild -scheme <スキーマ名> archive -archivePath $ARCHIVE_PATH \
-allowProvisioningUpdates \
-authenticationKeyIssuerID <IssuerID> \
-authenticationKeyID <キーID> \
-authenticationKeyPath <APIKeyのパス>
# generate ipa
xcodebuild -exportArchive \
-archivePath $ARCHIVE_PATH \
-exportPath $IPA_PATH \
-exportOptionsPlist <ExportOptions.plistのパス> \
-allowProvisioningUpdates \
-authenticationKeyIssuerID <IssuerID> \
-authenticationKeyID <キーID> \
-authenticationKeyPath <APIKeyのパス>
あとは上記スクリプトを実行すれば、アーカイブの作成・ipaファイルのエクスポート・App Store Connect への配信まですべて自動で行われます。
GitHub ActionsなどのCIツールからビルドする際も、APIKeyをSecretsから復元したり、IssuerID・キーIDなどは環境変数から読み込むようにして、ビルドステップで上記スクリプトを実行するだけでビルド・配信を自動化することができます。