Xcode Cloudのワークフロー構成
ワークフローはCI/CD上で実行できる一連の処理のまとまりの事です。Xcode Cloudのワークフローは次の4つの要素で構成されています。
1.Start Condition
Start Conditionではワークフローを実行する条件を設定します。例えば、Pull Requestに変更があった時や、特定のGit Branchに変更がPushされた時などを条件として設定できます。
2.Environment
ワークフローを実行するmacOSやXcodeのバージョンが設定できます。また、ビルドをクリーンビルドにするかインクリメンタルビルドにするか選択できます。インクリメンタルビルドがXcode Cloud上で行える事に非常に驚きました。これにより、ワークフローのビルド時間の短縮が期待できます。
3.Actions
アクションはワークフロー内で実行される作業です。ビルド、静的解析、テスト、およびアーカイブを主に選択して追加できます。Xcode Cloudを使いアーカイブする際にはプロビジョニングプロファイルを設定する必要がなく(他の一般的なCI/CDサービスでは必要となる)、純正サービスならではのメリットを感じました。
4.Post-Actions
Post-ActionsはActionsがすべて終わったあとに実行される処理です。例えば、ビルド結果をSlackに通知したり、TestFlightにアプリを配信したりすることができます。

以上の説明した要素をカスタマイズし、さまざまなワークフローを作れます。例として、アプリを外部にリリースをするワークフローが説明されていました。このリリースワークフローでは次のような設定になっています。
まず、リリースブランチに対してコードがPushされるとワークフローが起動します。その後、テストとアーカイブのActionが実行されます。最後にPost-ActionsとしてTestFlightへの配信が行われます。ワークフローの設計は他のCI/CDサービスと同様に行える印象を持ちました。

Xcode Cloudのより高度な機能
Customize your advanced Xcode Cloud workflowsではより高度な機能について紹介されていました。
Xcode Cloudにおいても他CI/CDサービスと同様にワークフロー中に実行される任意のShell scriptを設定する事ができます。この機能はCustom scriptsと呼ばれており、Post-clone、Pre-Xcodebuild、およびPost-Xcodebuildの3つの種類があります。

これらの種類は実行されるタイミングの違いがあり、それぞれ名前となっているタイミングにて実行されます。

Custom scriptを設定するためにはプロジェクトのルートディレクトリにci_scriptsという名前のディレクトリを作成し、その中にCustom script各種に対応する命名でスクリプトファイルを追加します。ワークフロー側を編集する必要はありません。

ワークフロー中に発生したビルドのイベントに応じたWebhook endpointを設定できる機能もあります。イベントはワークフローが開始された時、ビルドが始まった時、およびワークフローが終了した時の3つあります。Webhookの設定はApp Store Connectから可能です。

Webhook endpointを設定すると設定したendpointから下記の画像のようなJsonを受け取る事ができます。

