xcprettyだとXCTestExpectationのタイムアウトエラーやXCTSkipが結果に反映されず、xcbeautifyだと問題なく動く
まだxcprettyを使っていませんか?今こそxcbeautifyに置き換えよう! by ikesyo | プロポーザル | iOSDC Japan 2024 #iosdc - fortee.jp で想定していた内容の一部の供養です(落選)。
社内のとあるプロジェクトで、XCTestExpectationがタイムアウトしているケースでもテストが成功扱いになっていたり、XCTSkipを使ったテストケースがログに出力されていないということがあった。CIでのテスト実行にはfastlaneを使っていたので、fastlaneの実行ログからxcodebuildの出力のフォーマッターを確認してみると、xcprettyが使われていた。
fastlane 2.201.0から scan, gym, snapshot に xcodebuild_formatter
というオプションが増えていて、そのデフォルトは xcbeautify
になっているのだが、これはシステム(PATH?)にxcbeautifyが存在する時だけで、xcbeautifyが存在しない環境ではxcprettyにフォールバックするようになっている。
はてなではiOSアプリのCI/CD環境としてCircleCIを使用している(2024年6月現在)が、CircleCIのMacインスタンスではxcbeautifyはインストールされておらず、xcprettyにフォールバックしていたのだった。
そこでCIのステップとして brew install xcbeautify
を先に実行してxcbeautifyをインストールするようにしたところ、XCTestExpectationのタイムアウトも、XCTSkipも正常に拾われるようになってめでたしめでたし。
xcbeautifyがREADMEで次のように謳っているとおり、
- [x] Supports the new build system's output.
- [x] Supports Xcode's parallel testing output.
- [x] Supports formatting Swift Package Manager output.
現代のXcodeやSwiftPM相手にはxcbeautifyを使っていくべきだということを実感した。
ちなみにGitHub ActionsのMacインスタンスについては macos-12
以降のイメージではxcbeautifyがプリインストールされているので安心していい。
その他のCIプロバイダー、例えばBitriseやCodemagicでのxcbeautifyのインストール状況を知っている方がいたらぜひ教えてください。
追記
- Bitrise: https://stacks.bitrise.io/stack_reports/
- xcbeautifyある 🙆
- Codemagic: https://docs.codemagic.io/specs/versions-macos/
- xcbeautifyない 🙅