【Swift/Xcode】No such module 'XCTest'の解決法!
この記事からわかること
- Xcodeで発生したNo such module 'XCTest'の原因と解決方法
- 解決方法:ビルドフェーズにライブラリを組み込む
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
XcodeにてXCTestフレームワークを使用してUnit Testを実装しようとした際に発生したエラーの原因と解決方法をまとめていきます。
- Xcode:Ver14.2
No such module 'XCTest'
今回発生したエラー「No such module 'XCTest'」はインポートしようとしているモジュールが見つからない場合に発生するエラーです。
このエラーはXCTestフレームワークを使用してUnit Testを実装しようとした流れの中の以下の部分で発生しました。
- プロジェクトの生成(Include Testsにチェック/Interface:Swift UI)
- 対象メソッドをContentView構造体に用意
- テストメソッドを[プロジェクト名]Testsクラス内に用意
- 「[プロジェクト名]Tests.swift」のMembershipの登録 ← この直後に発生!
テストメソッドを実装した「[プロジェクト名]Tests.swift」ファイルのMembershipにプロジェクト(Swift_Test)を追加した際にエラーは発生しました。
import XCTest // No such module 'XCTest'
@testable import Swift_Test
final class Swift_TestTests: XCTestCase {
override func setUpWithError() throws {
}
override func tearDownWithError() throws {
}
func testExample() throws {
XCTAssertEqual(ContentView.canConvertToNumber("123") == true,true)
}
func testPerformanceExample() throws {
self.measure
}
}
}
なぜ先ほどまで発生していなかったエラーがMembershipを追加したことで発生したかは分かりませんが、Xcodeを再起動したり、最新のXcodeにアップデート、「Clean Build Folder」の実行、「DerivedData」を丸々削除したりしても解決しませんでした。
解決方法:ビルドフェーズにライブラリを組み込む
最終的に解決できたのはビルドフェーズにライブラリを組み込む方法です。ターゲットをビルドする際のビルドフェーズ構成は「メインターゲット(TARGETS)」>「Build Phases」タブから設定できます。その中の「Link Binary With Libraries」をクリックして「+」ボタンを押します。
入力欄に「XCTest」と入力し「XCTest.framework」を選択して「Add」をクリックします。以下のように追加されれば完了です。
Xcodeを再起動して念の為「Clean Build Folder」を実行し、再度テストを実行してみると...
無事成功しました。
そもそもMemberShipを使用せずとも@testable
を使用することでも別ターゲットのファイルを参照できるので参考にしてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。