UnityにFirebase入れたらJenkinsビルドが失敗を繰り返すようになった
発端
UnityにFirebaseを導入したは良いのだけどJenkinsビルドが通らなくなった。
以下エラーの記述を一部抜き出したもの
Undefined symbols for architecture armv7: "_OBJC_CLASS_$_FIRGoogleAuthProvider", referenced from: objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o) "_OBJC_CLASS_$_FIRGitHubAuthProvider", referenced from: objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o) "_OBJC_CLASS_$_FIREmailPasswordAuthProvider", referenced from: objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o) "_OBJC_CLASS_$_FIRFacebookAuthProvider", referenced from: objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o) "_OBJC_CLASS_$_FIRApp", referenced from: objc-class-ref in libApp.a(app_ios_3c1f2f5540e3edfbae8c7bf918ae5900.o) "_OBJC_CLASS_$_FIRAuth", referenced from: objc-class-ref in libAuth.a(auth_ios_7d6b9e9ddb5f240ff95f510fddebba51.o) "_OBJC_CLASS_$_FIRTwitterAuthProvider", referenced from: objc-class-ref in libAuth.a(credential_ios_de0c3e1fa34e9a30835a63e195323a0f.o) ** BUILD FAILED **
どうやら原因はFirebaseのライブラリを参照できないことらしい・・・。
ローカルのビルドは通るのに何かおかしいと思いローカルビルドとJenkinsビルドの生成物の違いを見てみると Podfile
が生成されていないことがわかった。
この Podfile
がないとFirebaseのAuthやAnalyticsのライブラリがインストールされないのである。
これは困った。。。毎回ローカルビルドでは非常に効率が悪い.
原因
そもそもこのPodファイルはFirebaseをUnityに取り込んだ時に追加される Google.IOSResolver
というファイルが Podfile
の生成を担っているのだがどうもこの Google.IOSResolver
がJenkinsビルドではうまく動作していないらしいということがわかった。
もう少し深く原因を探ってみると Google.IOSResolver
を呼び出すのは FirebaseAuthDeps
などのスクリプトなのだが
#elif UNITY_IOS UnityEngine.Debug.Log("FirebaseDeps"); Type iosResolver = Google.VersionHandler.FindClass( "Google.IOSResolver", "Google.IOSResolver"); if (iosResolver == null) { return; } Google.VersionHandler.InvokeStaticMethod(iosResolver, "AddPod", new object[] { "Firebase/Auth" }, new Dictionary<string, object>() { { "version", "3.10+" }, { "minTargetSdk", "7.0" } }); #endif
このように iOS
ビルドの時のみ呼び出されるものだった。
一応Jenkinsビルドが行われる時はUnity上のスクリプトから Switch Platform
をしているのだが恐らく Switch Platform
の前にPodfile生成のメソッドが呼ばれているようである。
解決
どうにかこうにか原因を探っているうちにJenkinsのジョブ設定のUnityの項目であらかじめ -buildTarget
を設定していなかったことがわかった。
//以前 -quit -batchmode -executeMethod "コマンドから呼び出すメソッド名" //修正後(-targetBuild追加) -quit -batchmode -buildTarget ios -executeMethod "コマンドから呼び出すメソッド名"
コマンドラインの部分を上記のように修正したらうまくいきました。
この問題で約5日間くらいJenkinsビルドに悩まされていたので解決して本当に良かった(;.:◉;.:◞౪◟;.◉;)
追記[Firebase 3.0.1]
FirebaseSDKのバージョンを3.0.1に上げたら再びビルドが通らなくなった、今回もiOSResolverがうまく動作してないことが原因のようだったのでプロジェクト内の Google.IOSResolver
の Select Platform For Platform
の項目を見てみると Editor
にのみチェックが入っていた。これを iOS
にもチェックを追加することできちんとCocoaPodが動作し、必要なライブラリが追加されるようになった。もし同じような問題でJenkinsビルドが通らなくなった人がいたら参考にしてほしい。