Xcode13(beta)で実機でUIテスト(XCUITest)しようとしたらBundle Identifierが勝手に書き変わってしまった

こんにちは。てぃろです。

最近の仕事ではSwiftで書いたiOSアプリの品質を維持向上させるために、コード分析やその修正から開発運用の見直しまでなんでもやっています。

その中でUIテスト(XCUITest)の整備をやっていたときに実機テストがなぜか動かないということがあったので、そのときの事象と対策をメモしておきます。

なぜかBundle identifierに”.xctrunner”と勝手にくっつく

シミュレータで十分テストコードが動作することを確認して、いよいよ実機でやってみようというときのことでした。以下のようなエラーが出てUIテストの実行ができなかったのです。

正確なエラーメッセージをなくしてしまったのですが…日本語でいうと、”XXX.xctrunnerというBundle Identifierはありません”というようなものでした。

.xctrunnerなんて自分で命名したところはなかったので、ここが怪しいと思い”.xctrunner”をキーワードにしていろいろググった結果、以下のissueに行きつきました。

上記はappiumのissueだったのですが、これを参考に各種設定を見直したところ無事UIテストの実行をすることができました。

現象としては、UITestのtargetに含まれるinfo.plistの Bundle identifierが具体的に設定されていない場合、テスト対象のtargetの Bundle identifier に勝手に.xctrunnerと接尾辞をつけた Bundle identifier でビルドしてしまうというものでした。

結果、Provisioned Profileで定義している Bundle identifier と食い違うので実機ビルドができない、ということになっていたようです。

ならば、ちゃんと Bundle identifier を設定していけばよいのです。

Bundle Identifierを設定し直す

設定の手順は、上記のGithubにある手順と同様でした。ここではそれを日本語で書いておきます。

テスト対象のSwiftコードが入っているtargetを選択して

[ target ] -> [ Build Settings ] -> [ Product Bundle Identifier ] と進みましょう。そして以下の画像のように [ Product Bundle Identifier ] の中身を消します(項目名は残っていてもOK)

(仕事上、ここしかスクショできないんです…

次に、UITestコードが入っているtargetに含まれるinfo.plistで、Bundle Identifierを設定しましょう。設定する Bundle identifier は、Provisioning Profileで指定しているものを使用します。

これで準備はOK。

UITestを改めてビルドして実機で動作することを確認しましょう。

まとめ

今回はXCUITestの実機ビルドでちょっと困ったときのことを自分用メモの意味も込めて記事にしました。

iOSアプリ開発ではBundle Identifierなど実機との紐づけに絡むような設定が結構ややこしいので、こういう部分でハマることが多い印象です。

むやみやたらと実機にインストールできてしまうと困るというのもわかるのですが、もう少し開発者体験がスムーズになるような方法など考えてくれるとうれしいなと思いますねぇ。