はじめに
本記事では Xcode Cloud を使用してCIを構築した際の手順を簡潔に紹介します。
Xcode Cloudの導入 〜 ビルド成果物をApp Store Connectにアップロード までの手順を紹介しています。
ちなみに、現時点でのXcode Cloudでは無料で 25時間/月 のビルド時間が利用できるので、おそらく個人で使う分には無料プランで十分だと思います。

前提条件
Xcode Cloudを使用するための条件が 公式ドキュメントに記載されているので、必須事項を抜粋して記載します。
Xcode Cloudを使用するための条件
Xcode Cloudを使用するためには、以下の条件を満たしている必要があります。
- Apple Developer Programに登録されている必要があります。
Apple Developer Programに登録されていない場合は、Apple Developer Programに登録してください。 - Xcode 14.0.1 以降を使用してください。
Xcode 14.0.1 は macOS 12(Monterey)以降 で対応しているOSになるので、Montereyに対応しているMacを使用してください。 - Xcode 設定のアカウントに Apple ID を追加します。
XcodeでApple Developer Programに登録されているApple IDのアカウントを追加してください。 - App Store Connectにアプリのアプリ レコードがあるか、アプリ レコードを作成するために必要な役割または権限を持っている必要があります。
App Store Connectにアプリの情報を登録している必要があります。
バージョン管理
現時点で、Xcode Cloudは以下バージョン管理システムをサポートしています。
いずれかのバージョン管理システムを使用してリポジトリを作成してください。
- Bitbucket Cloud
- GitHub
- GitLab
Xcode Cloudの設定
Xcode Cloudをソース管理システムに登録する
筆者はGitHubでリポジトリを管理しているので、GitHubでの設定手順を紹介しています。
Xcodeでプロジェクトを開いて、一番右のメニューから「Cloud」を選択し、「Get Started...」をクリックします。

ビルド対象とするアプリを選択して「Next」をクリックします。

以下の画面で「Next」をクリックします。

GitHubのリポジトリへXcode Cloudを登録するための認証を行うので、
「Grant Access」をクリックして認証を行います。

以下の画面で「GitHubでステップ2を完了」をクリックします。

Xcode Cloudをインストールするアカウントを選択します。

今回は指定したリポジトリにのみインストールしたいので、「Only select repositories」を選択し、リポジトリを選択します。
リポジトリを選択したら「Save」をクリックして設定を保存します。

Xcode Cloudの設定が完了するので、「Xcodeで続ける」をクリックして、Xcodeに戻ります。

正常に終了すると、以下の画面が表示されているので、「Next」をクリックします。

「Complete」をクリックします。

ビルドを開始するかどうかを確認する画面が表示されるので、ビルドを行いたいブランチを選択して「Start Build」をクリックします。

ビルドが開始されるので、ビルドが完了するまで待ちます。

ビルドが完了すると、以下の画面のようになります。
GitHubの Settings から Integrations の GitHub Apps を確認すると、Xcode Cloudがインストールされていることが確認できます。

ワークフローの設定
既存のワークフローを右クリックして「Edit Workflow」を選択します。
「Manage Workflows」を選択するとワークフローの一覧画面が表示されます。

以下の画面が表示されるので、各項目を入力してワークフローの設定を行います。
General
ワークフローの基本情報を設定します。
基本的にはデフォルトの設定で問題ないですが、必要に応じて設定を変更してください。

項目名 | 説明 |
---|---|
Name | ワークフローの名前を指定する項目です。デフォルトでは「Default」と設定されていますが、特定のビルドパイプラインの識別名を自由に設定できます。 |
Description | ワークフローに関する説明を記載するフィールドです。チームメンバーがこのワークフローの目的や詳細を把握しやすくするための項目ですが、空白にしておくことも可能です。 |
Restrict Editing | このオプションを有効にすると、ワークフローの編集をアカウントホルダー、管理者、アプリマネージャーのみに制限します。チームメンバーが誤って変更しないようにするための設定です。 |
Primary Repository | ワークフローがアクセスするGitリポジトリを指定します。 |
Project or Workspace | ビルドするプロジェクトまたはワークスペースファイルを指定します。 |
Environment
ビルドに使用する環境や環境変数を設定します。
特に指定がない場合は、デフォルトの設定で問題ありません。

項目名 | 説明 |
---|---|
Xcode Version | ビルドに使用するXcodeのバージョンを指定します。 |
macOS Version | ビルド環境で使用するmacOSのバージョンを指定します。 |
Environment Variable Value | 環境変数を設定できる項目です。ビルドプロセスに渡したいカスタム環境変数を追加することで、プロジェクトに対して特定の設定を適用できます。 |
Environment Variable Secret | 環境変数の値をシークレットとしてマスクするオプションです。例えば、APIキーやパスワードなど、機密情報を環境変数に設定したい場合にこのオプションを有効にして、値を非表示にできます。 |
Branch Changes
ビルドするブランチやビルドの開始条件などを設定します。
今回は、mainブランチに変更があった場合にビルドを開始するように設定しています。

項目名 | 説明 |
---|---|
Source Branch | ビルドを開始するブランチを指定します。「Any Branch」を選択すると、すべてのブランチがビルド対象となります。「Custom Branches」を選択して特定のブランチのみを対象にすることもできます。 |
Files and Folders | ビルドを開始する条件として、ファイルやフォルダの変更に基づくかを設定します。 「Start a Build If Any File Changes」は任意のファイル変更があればビルドを開始する設定です。 「Custom Conditions」を選択すると、特定のフォルダやファイルの変更があった場合にのみビルドを開始するようにカスタマイズできます。 |
Options: Auto-cancel Builds | 「Auto-cancel Builds」オプションを有効にすると、同じブランチに対する新しいビルドが開始された際、実行中またはキューに入っている同じ種類のビルドを自動的にキャンセルします。 |
もし、手動でビルドを開始したい場合は、Start Conditionsの右矢印をクリックして「Manual Start」を選択します。
他のStart Conditionsの設定は削除しておいてください。

Archive - iOS
対象のスキーマと、配信対象の設定をします。
今回は、TestFlightやApp Store Connectにアップロードせずに、生成されたビルド成果物を手動でアップロードするので「None」を選択しています。

項目名 | 説明 |
---|---|
Platform | 対象となるプラットフォームを指定します。 |
Scheme | ビルドおよびアーカイブの対象となるXcodeスキームを指定します。 |
Distribution Preparation | ビルドの配布準備を設定します。次の3つのオプションがあります: |
None | 配布準備を行わない設定です。ビルドは行われますが、配布には進みません。 |
TestFlight (Internal Testing Only) | ビルドをTestFlightで内部テストとして配布する設定です。プルリクエストや開発ブランチでのテストに推奨されます。 |
App Store Connect | ビルドをApp Store Connectにアップロードし、全てのテスターや顧客に配布する設定です。リリースブランチでの使用が推奨されます。 |
Post Actions
Post Actions ではビルドが完了した後に実行するアクションを設定できます。
今回は特に設定せずに進みます。

カスタムスクリプトの設定
カスタムスクリプト を設定することで、ビルド前後に任意の処理を実行できます。
Xcode Cloudだけでは対応できない処理を追加する場合に使用します。
今回は筆者がハマったポイントを紹介します。
スクリプトを追加する
カスタムスクリプトを実行するために、プロジェクトの直下に ci_scripts
ディレクトリを作成し、 ci_post_clone.sh
ファイルを作成します。

スクリプトファイルに実行権限がないと、Xcode Cloudでスクリプトを実行できないため、以下のコマンドを実行して実行権限を付与します。
chmod +x ci_scripts/ci_post_clone.sh
XcodeBuildToolPluginを組み込んだプラグインの署名検証をスキップする
筆者は、 LicenseList というパッケージを使用してアプリで使用しているパッケージの一覧を表示しています。この LicenseList には、PrepareLicenseList という XcodeBuildToolPlugin を組み込んだプラグインが含まれています。XcodeBuildToolPlugin では外部のプラグインやスクリプトを実行することが可能であり、署名検証を行わないでビルドするとセキュリティ上のリスクがあるため、ビルドエラーとなります。

そのため、Xcodeのプラグインの署名検証をスキップする設定を追加する必要があるので、ビルドスクリプトに以下のコマンドを追加します。
# Xcodeのプラグインの署名検証をスキップ
# ※LicenseList で PrepareLicenseList の検証でエラーが出るためこの設定が必要
defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES
CocoaPodsの依存関係を解決する
Xcode Cloudでは、Swift Package Manager(SPM)の依存関係は自動的に解決されますが、CocoaPodsの依存関係は手動で解決する必要があります。そのため、ビルド前に pod install を実行するためのカスタムスクリプトを追加する必要があります。Xcode Cloudには Homebrew がインストールされているため、まず Homebrew を使って CocoaPods をインストールし、その後 pod install を実行して依存関係を解決します。
# CocoaPodsをインストール
brew install cocoapods
# CocoaPodsで管理する依存関係をインストール
pod install
ビルド成果物をApp Store Connect にアップロードする
ビルド成果物をダウンロードする
ビルドが完了すると、ビルド成果物が生成されます。
それぞれの成果物の役割を以下に記載します。

Artifact名 | 説明 |
---|---|
Archive for {ターゲット名} on iOS | iOSアプリのアーカイブファイルで、App StoreやTestFlightへ提出するために使用されます。これにはビルドされたバイナリやアセットなどが含まれています。Xcodeから直接App Store Connectにアップロードする場合、このアーカイブファイルを使用します。 |
Logs for {ターゲット名} archive | アーカイブプロセス中に生成されたログファイルです。ビルド中に発生したエラーや警告を確認するのに役立ちます。特にビルドやアーカイブの問題のデバッグに利用されます。 |
{ターゲット名} {アプリバージョン} ad-hoc | Ad-hoc配布用にビルドされたアプリケーションで、内部テストなどでiOSデバイスに直接インストールして動作確認するために使用されます。 |
{ターゲット名} {アプリバージョン} app-store | App Store向けにビルドされたバージョンで、Appleの審査やリリースプロセスに使用されます。Transporterなど他のアプリを使用してApp Store Connectにアップロードする場合、このファイルを使用します。 |
{ターゲット名} {アプリバージョン} development | 開発者向けにビルドされたバージョンで、通常は開発中の動作確認やテストに使用されます。開発環境向けの設定が含まれていることが多いです。 |
XCResult for {ターゲット名} archive | Xcodeのテスト結果ファイルです。テストの実行結果やビルドの詳細な状態を確認できるため、テストに失敗した場合の詳細を分析する際に使用されます。 |
今回は手動でビルド成果物をApp Store Connectにアップロードするため、Archive for {ターゲット名} on iOS をダウンロードします。

zipファイルがダウンロードされるので、解凍して、.xcarchiveファイルをダブルクリックします。

Xcodeが起動し、以下の画面が表示されます。
バリデーション
「Validate App」をクリックします。

ここで 「Validate」を選択すると、Teamが選択されていないとエラーが発生します。


そのため「Custom」を選択します。

任意のTeamを選択します。

デフォルトのまま進めていきます。


「Validate」をクリックして、バリデーションを行います。

アップロード
次にアップロードしていきます。
「Distribute App」を選択します。

「Custom」を選択します。

デフォルトのまま進めていきます。


任意のTeamを選択します。

デフォルトのまま進めていきます。


「Upload」をクリックします。

以上で、Xcode Cloudのビルド成果物をApp Store Connectにアップロードする手順は完了です。
参考リンク
- 公式ドキュメント
- Xcode Cloud導入
- LicensePlistの依存関係解決時のエラー解決方法