既存のプロジェクトにXCTestを導入しようとしたら色々つまづいたので、その内容と解決法をシェアします。どなたかのお役に立てば幸いです。
環境
- Xcode:10.1
- macOS:10.14.1
前提
- Unit test targetがある
- Build Settings > Defines Modulesの項目が
Yes
になっている - 参考:Quick/SettingUpYourXcodeProject.md at master · Quick/Quick · GitHub
BridgingHeader問題
Testファイルに@testable import App名
しようとしたら、BridgingHeaderのエラーが出てimportできず。(BridgingHeaderにはいつも悩まされている気がします。)
解決策
以下で欠けているものがあればやる。
①podfileに下記を追加してpod update
target 'YourProductTests' do
inherit! :search_paths
# Pods for testing
end
②Test Targetの Build Setting > Swift Compiler -Code Genration > Objective-C Bridging Header
にbridging-headerのパスを追加
- Main targetにすでに記載があればコピペする
- なければ
$(SRCROOT)/$(PRODUCT)/Bridging-Header.h
みたいな感じで追加する
③Test Targetの Build Setting > Search PathのFramework Search Path
、Header Search Paths
、Library Search Path
の3つに対して、Main targetと同じものを追加
→これらをすべてやることで、Testファイルで@testable import App名
が呼べるようになりました。
Main Thread Checker問題
いざTestを実行すると、must be used from main thread only
というエラーでクラッシュ。
少し調べるとMain Thread Checkerというワードが。
参考:iOS 11 Xcode 9で“だいぶまとも”に!新機能をまとめてみた | DevelopersIO
下記の記事にもあるように、Main Thread Checkerを無効にするのはあまり良いやり方ではなさそうです。
Xcode 9 環境 で GoogleAnalytics を動かすまでの軌跡 - Qiita
解決策
PodのFirebaseのバージョンを4.x系に上げる。(Firebaseが古いのが原因)
pod 'Firebase' , '~> 4.0'
pod 'Firebase/AdMob' , '~> 4.0'
pod 'Firebase/RemoteConfig' , '~> 4.0'
pod update
すると以下のようなエラーがたくさん出ますが、頑張ってポチポチやって解消します。
'FIRAnalytics' has been renamed to 'Analytics'
Extraneous argument label 'withName:' in call
kFIRParameterItemID' has been renamed to 'AnalyticsParameterItemID
→これでテストが通りました。やっとTest Succeededのマークが出てめっちゃうれしい。