【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

この記事からわかること

  • Xcode Cloudとは?
  • CI/CDの仕組み
  • GitHubとの連携

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Xcode Cloudとは?

Xcode CloudとはApple公式が提供しているCI/CDサービスです。Apple公式ということもありXcodeから設定等を行うことが可能になっています。Apple Developer Programに加入していれば活用することができ月25時間の無料枠が用意されているため個人利用するレベルであれば費用がかからず運用できるのも大きなメリットです。(他のCI/CDサービスはmacOS環境だけコストが数倍になっていることが多いです)

Xcodeから設定を行えるので他のCI/CDサービスでの設定ファイルであるyaml(ヤムル)ファイルを必要としない構造になっており、設定等はApp Store ConnectからGUI操作で行う仕組みになっています。

前提として対象のプロジェクトコードがGitHub/GitLabにリポジトリにありGitHubとの連携を認証することで活用可能になります。

特徴

Xcode Cloudの導入方法

Xcode Cloudを導入するためにまずはプロジェクトを起動します。対象のプロジェクトはGitHubにも上げておいてください。ナビゲータエリアの一番右のアイコンの「Cloud」をクリックし、「Get Started」をクリックします。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

以下のような画面になるのでこちらも「Next」をクリックします。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

Productの選択画面になるので対象のProductを選択します。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

ここはワークフロー自体の名前や詳細を設定することができますが、今回は特に変更せず「Next」をクリックします。もちろん後から変更することが可能です。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

対象のプロジェクトがGitHubと連携できていない場合、以下のような画面になるので「Grant Access」をクリックします。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

ブラウザが起動してXcode CloudとGitHubの連携フローに従い操作を続けます。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

Authorize Xcode Cloud」をクリックします。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

連携するリポジトリを選択できるので「All repositories」または「Only Select repositories」で対象のリポジトリを指定し「install」をクリックします。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

以下のように正常に接続できれば成功です。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

Xcodeに戻ると緑色のアイコンが表示されるようになります。「Next」をクリックします。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

最後にトリガーとなるブランチを指定して「Start Build」をクリックすればXcode Cloudとの連携が完了します。あとはGitHubリポジトリの対象のブランチに対してプッシュを行ったタイミングがトリガーとなりXcode Cloudのワークフローが実行されます。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

また実際の開発しているアプリだと以下のように複数のリポジトリが表示されることがありますが、GitHubの承認が必要なのは自身のものだけで大丈夫です。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

もしApp Store Connectにまだ対象のアプリを作成していない場合はもう少し続きがあります。

App Store Connectに対象のアプリが作成されていない場合は以下のような画面が表示されるので「Complete」をクリックして作成します。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

今回「XcodeCloudTest」というありきたり名前で進めてしまったので作成時にそもそもApp Store Connectに登録できずに以下の絵エラーになってしまいましたが、ちゃんとした名前で進めれば問題なく作成できると思います。もしそれでもうまくいかない場合は先にApp Store Connectにアプリを作成しておいてください。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

App Store Connectからの設定方法

ワークフローの細かい設定はXcodeとApp Store Connectの2箇所から行うことができます。Xcodeの場合はナビゲータエリアの一番右のアイコンの「Cloud」から対象のワークフローを右クリックして「Edit Workflow」を選択します。App Store Connectの場合は対象のアプリの「Xcode Cloud」タブを開くと以下のようにビルド履歴を確認することができ、ここからビルドのステータスや実行時間、エラーログ等も確認可能です。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

左のメニューから「ワークフローの管理」を選択するとワークフロー名や紐付ける環境変数、トリガーとするブランチ等を設定を変更することができます。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

またXcode Cloud自体の使用状況もアプリ単位で確認することができるようになっています。

【iOS/CI/CD】Xcode Cloudとは?GitHubとの連携と使い方を解説

スクリプトを実行したい場合

ワークフロー内でスクリプトを実行したい場合は、対象のリポジトリにci_scriptsディレクトリをプロジェクトルートに作成し、その中にスクリプトファイルを配置します。Xcode Cloudは自動的にci_scriptsディレクトリの中にあるスクリプトを実行してくれます。

例えばGitHubのリポジトリに公開したくないファイル等はスクリプトでビルド時に動的に生成することで、セキュリティを確保することができます。例えば「GoogleService-Info.plist」を動的に生成する方法を紹介していきます。まずは「GoogleService-Info.plist」の中身をbase64でエンコードします。

$ base64 -i GoogleService-Info.plist

ここで出力された文字列をApp Store Connectの環境変数GOOGLE_SERVICE_INFOに追加します。

あとは動的に環境変数から中身を取り出してファイルを生成するスクリプトを組んでci_scriptsディレクトリに設置しておくだけです。


#!/bin/sh

# 1. 目的のファイルパスを定義
FIREBASE_PATH="../GoogleService-Info.plist"

# 2. ディレクトリが存在しない場合は作成
mkdir -p "$(dirname "$FIREBASE_PATH")"

# GoogleService-Info.plist の復元
if [ -n "$GOOGLE_SERVICE_INFO" ]; then
    echo "$GOOGLE_SERVICE_INFO" | base64 -d > "$FIREBASE_PATH"
    echo "✅ GoogleService-Info.plist restored."
else
    echo "❌ Error: GOOGLE_SERVICE_INFO is not set in Xcode Cloud."
    exit 1
fi

Test Flightで配布する

Test Flightでの配布は簡単に設定できるようになっており、App Store Connectの「ワークフローの管理」>「アクション」にあるアーカイブの「TestFlight(内部テストのみ」にチェックを入れておくだけです。デフォルトでは「なし」になっており、もう一つの「App Store Connect」を選択するとリリース用のビルドとしてアップロードしてくれます。

ただTest Flightでは内部テスターのみ配布が可能になっているのと、内部テスターグループの設定を「自動配布」にしておく必要があるので注意してください。また更に輸出コンプライアンス(暗号化の確認)が入るとこれでも自動配布まで至れないのでスキップされるように「info.plist」に事前にApp Uses Non-Exempt Encryptionを入れておくことをオススメします。

【Apple/iOS】Appの暗号化通信で輸出コンプライアンスの質問をスキップする方法

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index