Xcode Cloud所感
Xcode CloudがXcode 13.4.1から使えるようになったので試してみました。
Xcodeの左のナビゲーションの一番右の Report navigator
もcloudタブからワークフローを作ることができるようになっています。
ここからXcode上でポチポチしていくだけで、ワークフローの設定だけでなく、リポジトリとの認証、AppStoreConnectでアプリの追加までも行うことができます。
ただAppStoreConnectと密結合されているのでアプリではなくSwiftのライブラリの開発でXcode Cloudを利用することはできません。
Xcodeでできるワークフローの設定
Environment
Environmentではビルド環境の設定ができます。変更できる設定は以下です。
- Xcodeバージョン
- 利用するXcodeのバージョンが指定できます
- beta版などもすぐに使えるようになっているようです
- macOS Version
- 利用するmacOSのバージョンが指定できます
- Clean
- cleanにチェックをいれるとderived dataなどのキャッシュが使われません
- archiveする際にはこの設定は必須になります
- Environment Variable
- 環境変数が設定できます
Start Conditions
Start Conditionsではワークフローを発火するトリガーを設定できます。 Start Conditionsは以下の4種類があります
- Branch Changes
- ブランチに変更があった場合に発火
- 特定のブランチを指定することもできます
- 特定の文字から始まるブランチも指定できます(branches beginning with "release-" など)
- 発火する条件にフォルダやファイルを指定することができます
- Pull Request Changes
- Pull Requestが作成された場合に発火
- 指定できる条件はBranch Changesと同じもの、プラス targetブランチが指定できます
- Tag Changes
- タグに変更があった場合に発火
- 特定のタグを指定することもできます
- 特定の文字から始まるタグも指定できます(tags beginning with "v" など)
- 発火する条件にフォルダやファイルを指定することができます
- On a Schedule for a Branch
- 設定したスケジュールで特定のブランチで発火
- cloneみたいな感じで設定できます。
Actions
Actionsはワークフローで実行されるものです。Actionsには以下の4種類があります。
- Build
- Test
- テストを実行します。
- ビルドと大体同じなのですが、テストを実行するデバイスを選べます。複数選ぶと並行に複数環境でテストすることが可能です。
- Analyze
- メモリリークなどの問題を発見することができます。やっていることはxcodebuild analyzeと同じです。
- Archive
Post-Actions
Post-ActionsではActions実行後に行うActionを設定できます。Post-Actionsには以下の3種類があります
- TestFlight Internal Testing
- Internal TesterにTestFlightで配布
- TestFlight External Testing
- External TesterにTestFlightで配布
- Notify
- ワークフローが成功や失敗した場合にslackやemailで通知することができます
このようにワークフローのトリガー、Action、Post-Actionをポチポチするだけで簡単に設定することが可能となっています。 ただしこれらの設定は設定ファイルに残るわけではなくXcode Cloud側で保持されています(コードで管理できない)
ポチポチするだけではできないこと
ビルドの事前準備
2022/9時点ではXcode Cloud上で提供されているツールは、macOSやXcodeに含まれているものとHomebrewだけになります。
よって、例えば外部ライブラリを利用するのにCocoaPodsやCarthageが必要であったり、XcodeGenをつかってプロジェクトを生成したりする場合にはこれらをインストールする必要があります。
CocoaPodsやCathageなどのツールのインストール方法
- Xcode Projectやworkspaceと同じ階層に
ci_scripts
という名前のディレクトリを作成 - ci_scriptsの中に
ci_post_clone.sh
ファイルを作成し、このファイルにCocoaPodsやCathageのインストールスクリプトを記載します
## ci_post_clone.sh #!/bin/sh brew install cocoapods pod install
ci_post_clone.sh以外にも、ci_pre_xcodebuild.sh, ci_post_xcodebuild.shも配置可能です。それぞれxcodebuildの実行前後にやりたいことがあればここにスクリプトを記載すれば実現可能です。
まとめ
これまではiOSアプリのCI/CD導入には証明書の取り扱い、xcodebuildやAppStoreConnect API, fastlaneなどといった知識が必要で導入にハードルがありましたが、Xcode CloudによってCI/CDの導入ハードルは非常に下がり誰でも導入しやすくなったことが大きいと思います。
逆に既にCI/CD導入済みの場合は現時点では不満に思えるところは少なからずあるように思います。個人的には、設定をコードで管理できない点とderived data以外のキャッシュがきかない(CocoaPodsなどのtool系のビルドが毎回必要)という点のデメリットが大きいなと思っています。
個人的には
- 現時点でCI/CD環境が整っている場合
- 現時点でCI/CD環境がなにもできていない場合
のような考え方が良いのではと思いました。
Xcode Cloudはまだできたばかりなのでこれからに期待ですね