7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

Fastlaneを使わずにiOSアプリのビルド・配信を行う

Last updated at Posted at 2023-07-19

はじめに

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 については、こちらの記事を参考にしてください。

スクリーンショット 2023-07-19 21.42.22.png

2.App Store ConnectでAPIキーを作成する

xcodebuildコマンドからcloud signingによる署名、App Store Connectへの配信を行うために必要なAPIキーを作成します(ロールはAdminで作成してください)。

スクリーンショット 2023-07-19 22.00.32.jpg

  • 作成した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などは環境変数から読み込むようにして、ビルドステップで上記スクリプトを実行するだけでビルド・配信を自動化することができます。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?