XCTest Mockingjayのエラー

自動化テストやCI/CDの勉強をしたくて下記の参考書を進めていたのですが、

iOSアプリ開発自動テストの教科書~XCTestによる単体テスト・UIテストから、CI/CD、デバッグ技術まで

Mockingjayを導入するとエラーにいくつかエラーが発生しました。


😣 エラー1

内容

characters は使用できませんよ〜的な感じです。
現在のSwiftバージョンでは既に characters は廃止されているみたいですね。

対応方法

MockingjayをインストールするためのPodfileの記述を下記のように変更します。

pod 'Mockingjay', '3.0.0-alpha.1'

参考リンク
https://github.com/kylef/Mockingjay/issues/118

Mockingjayの READMEにしたがって導入すると

pod 'Mockingjay'

としてしまうので READMEの更新があるといいんですけど Release Noteの最終更新が2019年なのでもう更新されないですかね。


😖 エラー2

内容

tearDown という名前の関数もしくは変数が複数存在していてどれを使えばいいか分からないよ〜って感じだと思う。

対応方法

エラーの行を下記のコードに変更します。(ライブラリのファイルを変更するためUnlock確認のダイアログが表示されますがUnlockを押下します。)

let tearDown = class_getInstanceMethod(XCTest.self, #selector(XCTest.tearDown as (XCTest) -> () -> Void))


こちらのエラーに対しての対応はmasterブランチにはマージされているみたいなのですが最新ブランチに取り込まれていないようです。

下記のコミットの内容ですね。
https://github.com/kylef/Mockingjay/commit/9e5bd2f0da4906ea7891675c4333c57a2dc88649#diff-03b1090856f1d9a33edac0aad26e065183030893bbf7d3d214a818f5a2b7d967R13


😫 エラー3

エラー内容

翻訳してもよく分からないですが、Xcode14以降からはiOS11以上のデプロイメントターゲットのみサポートしているらしく、僕の実行環境はXcode16でPodsで導入したライブラリの Minimum Deployments が8.0だったことが問題だったっぽい。

対応方法

Podfileに下記を追加する。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = "11.0"
    end
  end
end

Podfileの全体像


😩 エラー4

エラー内容

すみません。これに関しては何が言いたいのかよく分かりません。
説明できる方は教えて頂けると助かります!

対応方法

Build Setingsの検索フィールドに Sandbox と入力し、User Script Sandboxing を Yes から No に変更する。


😎 まとめ

1つ直すと次のエラーが出る感じでイタチごっこになるかと思いましたが、ここまでの対応でエラーが解消されました。
今から自動テストの勉強をするなら Swift Testing を勉強するべきなのかもしれないのですが、保守案件で既にユニットテストを実装している場合、XCTest を使用している可能性が高いかと思いましたので、まず XCTest から始めました。

自分用のメモを残す目的で記事を書きましたが、同様のエラーで悩んでいる方がいましたら少しでも力になれましたら幸いです。