BitriseのワークフローにiOS Device Testing(Firebase Test Lab)を組み込む前に、ローカルで実機テストする

Bitrise上でのビルドは、すんなりとはいかないものです。

以下の記事でワークフローにiOS Device Testingステップを組み込む方法について紹介したのですが、対象が巨大で複雑化したiOSアプリとなると、うまく設定したつもりでもなかなかビルドが通らなかったりします。

bamboo-hero.com

iOS Device Testingステップでうまくテストが実行されないという問題に直面したときは、まずローカルでテストが実行できることを確認すると良いです。

Bitriseではなく、Firebase Test Labのドキュメントにその方法が載っていたので、簡単に紹介したいと思います。

テスト用ファイルをビルドする

BitriseのワークフローにXcode Build for testing for iOSステップを組み込むと、ビルドのログで実行されているコマンドが確認できます。

f:id:bamboohero:20210422023756p:plain

まず、このコマンドをローカルで実行し、アプリをビルドします(一部オプションとかは消してます)。

$ xcodebuild -project BambooCIApp.xcodeproj -scheme BambooCIApp -configuration Debug -destination generic/platform=iOS build-for-testing

ビルドすると、~/Library/Developer/Xcode/DerivedDataディレクトリ配下にビルド成果物が保存されます。

私の環境では~/Library/Developer/Xcode/DerivedData/BambooCIApp-dcrfjjsqgqxqrdaitjdhnxqbvnkeというディレクトリが作成されました。

このディレクトリ配下のBuild/Productsディレクトリには、テスト用のファイルが保存されています。

$ cd ~/Library/Developer/Xcode/DerivedData/BambooCIApp-dcrfjjsqgqxqrdaitjdhnxqbvnke/Build/Products
$ ls
BambooCIApp_iphoneos14.4-arm64.xctestrun  Debug-iphoneos

実機でUIテストを実行する

実機をMacに接続しておきます。

実機のデバイスIDを以下のコマンドで確認します。

$ xcrun xctrace list devices
== Devices ==
xxxxx (14.4) (8be3cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)

== Simulators ==
...

以下のコマンドを実行すると、実機でUIテストが実行されます。

$ xcodebuild test-without-building \
    -xctestrun BambooCIApp_iphoneos14.4-arm64.xctestrun \
    -destination id=8be3cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

まとめ

Bitriseでビルドが失敗したらXCodeの設定を見直し、それをプッシュして再度Bitriseでビルドする、という繰り返しは非常に非効率です。

まずはローカルで実機テストが確実に動くことを確認しておくと、Bitrise上でのビルドもスムーズに行くことでしょう。