終わり。以下メモ。
SchemeのTestで遊んでいた昼下がり、新規ProjectでTestを実行したらシミュレーター2つ立ち上がってビックリした。Intel MacBookなのでとてつもなくファンが回った。stack overflowに同じ事例があって解決した。今日はTestの内容。
開発環境
> xcodebuild -version Xcode 14.1 Build version 14B47b
モチベーション
XcodeではCmd+UでActiveなSchemeのTestを実行できる。その際にユニットテストだけ実行する場合はシミュレーターを立ち上がらせたくない、みたいな気持ちになって調べたらSchemeに紐づく全てのTargetの "Hosting Application" をNoneにすればシミュレーターを立ち上げずにTestが実行されることが分かった。実際に試して期待通りに動作することを確認した。
これでユニットテストを実行する時はシミュレーター立ち上がらせなくて良くなった。めでたし。…ではTest自体はどこで行われている?気になったので調べた。とりあえずログを比較するところからやっていく。
ログ: Hosting Applicationに任意のApp Targetを指定
Hosting Applicationに任意のApp Targetを指定してTestを実行させた。
選択中のシミュレーターの機種名が表示されていて、シミュレーターが起動してアプリがインストールされて起動する。
ログ: Hosting ApplicationをNoneに指定
Hosting ApplicationをNoneに指定してTestを実行させた。
選択中のシミュレーターの機種名が表示されていて、シミュレーターは起動するだけ。どうやらアプリとは別のプロセスらしきもので実行されていそう。
xcresultを見る
もう少し深追いする。ログで折りたたまれていた箇所に記載されているxcresultファイルを見てみる。
Finder上でダブルクリックするとXcode上で開いてくれる。
各テストケースの実行時間などが列挙されていて、どのように実行されたかは書かれていない。xcresultはそういうものなのだろう、と理解。 結局Hosting ApplicationをNoneに指定した場合にテストがどこで実行されたか、ということの明確な答えは得られなかった。ログを見る感じ、指定したシミュレーター上でアプリを介さずに動かしてそうな気配を感じる。