Firebase Unity 実機ビルドエラーとクラッシュの解決
本業のゲーム開発の方で、Firebase Unityを使用しています。
Firebaseは、ソーシャルゲームのように大規模なサーバーを構築せずとも、フルマネージドでメンテナンス運用コストを圧縮できるのが魅力です。運用型のゲームやサービスを運用する際、最も重要になるコストの一つとして挙げられるのがサーバーの運用コストですからね。
しかし、カジュアルゲームアプリであっても、ある程度のネットワークインフラが必要になる場合があります。というか今がそうですが。
ということでFirebaseのRealtime DatabaseやAuthorizationを利用することになったのですが、そこで発生したビルドエラーやクラッシュを解決する方法を備忘録として残しておきます。
ビルドに使用した環境
- Macbook Pro 15インチ 2018
- Unity 2019.3.13f1
- Firebase Unity 6.13.0
- Google Signin Unity v1.0.4
- Xcode 11.4.1
iOSビルド時に発生したビルドエラー
Firebaseには多くの機能が備わっており、その機能の一つに、ユーザー認証機能があります。
一般的なSNSの認証から匿名認証まで幅広く利用できます。これを利用しない手はありません。
僕はその中でもGoogleログインの認証を実装していました。
Googleログインとは、Gmailアカウントで認証する方式です。
実装するにあたり、上述したSDK(google-signin-unity v1.0.4)を利用しました。
これを利用してiOSをビルドしていきます。
はい。ダメです。
エラーの詳細はGIDSignInUIDeletegateではなく、GIDSignInDelegateじゃない?というような提案されますが、その提案通りに修正する必要はありません。原因はこれでした。
‘>=4.0.2’の状態だと、5.x系を指定されてしまうことがあり、それによって上記のようなビルドエラーが発生するようです。
ですので、余計なバージョンを選択されないように、’=4.0.2’にします。'<5.0.0’でも可という投稿も見つけましたが、Unity上ではXMLのパースエラーとなりましたので、’=4.0.2’指定としました。
また、この指定はXcodeのProfileから直接行わずに、Unity内にインポートしたGoogleSignInのGoogleSignInDependencies.xmlファイルを編集しましょう。
これでビルドエラーがなくなるはずです。
これ以外のビルドエラーが発生した場合は自力でなんとかしてくださいw
実行時に InvalidPathException が発生してクラッシュする
さて、無事ビルドが通るようになったので実行してみました。
すんなり実行させてくれるはずないと思っていましたが案の定クラッシュしてしまいました。
エラーの内容は以下の通りです。
Uncaught exception: InvalidPathException: (child:) Must be a non-empty string and not contain '.' '#' '$' '[' or ']'
パスの指定に使用できない記号があるとInvalidPathException例外がスローされるようです。
しかし、ソースコードを確認しても禁則文字を使用している箇所がありませんでした。
実はこれ。禁則文字で指定されている以外の記号でもエラーになる場合があるのです。
その禁則文字とは何か?それは”空白または空文字”です!
パスを生成する処理の中で空文字のみのパスを指定している箇所があったのです。
この空文字指定している処理を修正して再度ビルドしたところ無事実行できました。
Unityで開発していると実機テストをサボりがちになりますが、
プロジェクトの終盤でビルドエラーやクラッシュに悩まされると想定外の時間が取られてしまいます。
なので最後の最後にビルドして実機チェックとかはやめましょう!でもやっちゃうよね。