自動化テストやCI/CDの勉強をしたくて下記の参考書を進めていたのですが、
iOSアプリ開発自動テストの教科書~XCTestによる単体テスト・UIテストから、CI/CD、デバッグ技術まで
Mockingjayを導入するとエラーにいくつかエラーが発生しました。
😣 エラー1
'characters' is unavailable: Please use String directly
内容
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
Ambiguous use of 'tearDown'
内容
tearDown
という名前の関数もしくは変数が複数存在していてどれを使えばいいか分からないよ〜って感じだと思う。
対応方法
エラーの行を下記のコードに変更します。(ライブラリのファイルを変更するためUnlock確認のダイアログが表示されますがUnlockを押下します。)
let tearDown = class_getInstanceMethod(XCTest.self, #selector(XCTest.tearDown as (XCTest) -> () -> Void))
こちらのエラーに対しての対応はmasterブランチにはマージされているみたいなのですが最新ブランチに取り込まれていないようです。
😫 エラー3
Showing All Messages
SDK does not contain 'libarclite' at the path '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a'; try increasing the minimum deployment target
エラー内容
翻訳してもよく分からないですが、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
Showing All Messages
Sandbox: mkdir(6427) deny(1) file-write-create /Users/daikikobayashi/Library/Developer/Xcode/DerivedData/XCTestSample-bwpnleglpzurspfeeeartannpvgb/Build/Products/Debug-iphonesimulator/XCTestSampleTests.xctest
エラー内容
すみません。これに関しては何が言いたいのかよく分かりません。
説明できる方は教えて頂けると助かります!
対応方法
Build Setingsの検索フィールドに Sandbox
と入力し、User Script Sandboxing
を Yes から No に変更する。
😎 まとめ
1つ直すと次のエラーが出る感じでイタチごっこになるかと思いましたが、ここまでの対応でエラーが解消されました。
今から自動テストの勉強をするなら Swift Testing
を勉強するべきなのかもしれないのですが、保守案件で既にユニットテストを実装している場合、XCTest
を使用している可能性が高いかと思いましたので、まず XCTest
から始めました。
自分用のメモを残す目的で記事を書きましたが、同様のエラーで悩んでいる方がいましたら少しでも力になれましたら幸いです。