概要
iOSアプリにFirebaseのプッシュ通知を導入したところ、急にCicleCIのテスト(Xcode build and run tests)で失敗するようになってハマったので、解決するまでやったことのまとめです。
環境
- XCode7.3
エラー内容
CircleCI上ではエラー内容が出てなかったので原因が分からなかったのですが、ローカルでbuild&testを実行してみたところ、以下のエラーが出ている事が分かりました。
$ xcodebuild -workspace '{アプリ名}.xcworkspace' -scheme '{アプリ名}' clean build test -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6,OS=latest' CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= PROVISIONING_PROFILE=
・・・
2016-09-08 07:30:34.535 XCTRunner[6174:22447] Running tests...\
07:30:35.399 XCTRunner[6174:22454] _XCT_testBundleReadyWithProtocolVersion:minimumVersion: reply received\
07:30:35.403 XCTRunner[6174:22453] _IDE_startExecutingTestPlanWithProtocolVersion:16\
2016-09-08 07:30:46.670 XCTRunner[6174:22447] Failed to background test runner within 10.0s.\
** TEST FAILED **\
上記エラーをググると下記のリンクに辿り着きました。
https://bitrise-io.github.io/devcenter/ios/frequent-ios-issues/
どうやら、UITest中にプッシュ通知の許可を促すダイアログが表示されていてテストに失敗していたようです。
対応
先ほどのリンクに書かれている通り、Unitテストであるか判定を行い、Unitテストでなければプッシュ通知の設定を行うように修正を行いました。
let unitTestMode = NSProcessInfo.processInfo().environment["XCTestConfigurationFilePath"] != nil
if !unitTestMode {
// プッシュ通知の設定
}
以上の対応で無事にビルドが成功するようになりました!