ゲームのビルド、インストール、実行プロセスのデバッグ

はじめに

ここでは、Firebase SDK for Unity を使用した Unity ゲームのコンパイルおよびビルドプロセスのデバッグを行う方法について説明します。新しいプラットフォーム向けにゲームを構成またはビルドするとき、あるいは更新後に発生する可能性のある一般的な問題を調査し、解決する方法について説明します。このドキュメントでは、これらのエラーがプロセスで発生する可能性のある順に解決方法を示しています。説明の順番に従って調査し、解決してから次に進んでください。

このドキュメントのほかに、Unity と Firebase のトラブルシューティングとよくある質問もご覧ください。

Play モードのコンパイルに関する問題

ビルドに関する最初の問題は、モバイルビルドを開始する前のエディタでのテスト中に発生することがあります。このセクションの内容は、Play モードの開始前と Play モード中に発生するすべての Firebase のエラーに関するものです。

Unity は、依存関係、コード、その他のアセットに対する変更を開始または検出すると、プロジェクトの再ビルドを試みます。そのときにプロジェクトをコンパイルできない場合、エディタはコンソールにコンパイル エラーを出力します。Play モードに入ろうとすると、Unity の [Scene] タブに「All compiler errors have to be fixed before you can enter playmode!」のようなエラーがポップアップ表示されます。

型、クラス、メソッド、またはメンバーがない

Firebase の問題の多くは、エディタやコンパイラが必要な型、クラス、メソッド、メンバーを検出できないことが原因で発生します。この問題の一般的な症状として、次のようなメッセージが出力されます。

The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?

The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)

‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'

解決手順:
  1. コードで Firebase のクラスやメソッドを使用している場合は、必要な Firebase プロダクトに適した using ディレクティブを指定し、使用できるようにします。

    1. MechaHamster: Level Up With Firebase Edition の例:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. 適切な Firebase パッケージがインポートされていることを確認します。

    1. 適切なパッケージをインポートするには:
      1. Firebase Unity SDK を .unitypackage として追加します。または
      2. 追加の Unity インストール オプションの代替方法を調べて実行します。
    2. プロジェクト内のすべての Firebase プロダクトと EDM4U が次の条件を満たしていることを確認します。
      • 同じバージョンを使用している
      • .unitypackage としてインストールされているか、Unity Package Manager のみを使用してインストールされている
  3. バージョン 10.0.0 より前の Firebase Unity SDK を .unitypackage としてインポートしている場合は、Firebase Unity SDK の zip アーカイブに .NET 3.x および .NET 4.x の両方のパッケージが含まれています。プロジェクトに、互換性のある .NET Framework レベルのみが含まれていることを確認します。

    1. Unity エディタのレベルと .NET フレームワークのレベルの互換性については、Unity プロジェクトに Firebase を追加するをご覧ください。
    2. Firebase パッケージを間違った .NET Framework レベルでインポートしている場合や、.unitypackage の使用から追加の Unity インストール オプションのいずれかに切り替える必要がある場合は、この移行のセクションで説明しているように、すべての Firebase パッケージを削除し、すべての Firebase パッケージを再インポートすることが最もクリーンな方法です。
  4. エディタがプロジェクトを再ビルドしていて、再生しようとする試みにプロジェクトの最新状態が反映されていることを確認します。

    1. Unity エディタのデフォルトでは、アセットや構成の変更が検出されると再ビルドが実行されます。
    2. この機能が無効になっており、手動で更新 / 再コンパイルするように Unity エディタが設定されている可能性があります。そのように設定されている場合は手動での更新を試してください。

Play モード ランタイム エラー

ゲームが起動しても、実行中に Firebase の問題が発生する場合は、次の方法を試してください。

Mac OS の場合: [セキュリティとプライバシー] で Firebase バンドルを承認する

Mac OS 版のエディタでゲームを起動するときに「FirebaseCppApp-<version>.bundle は開発元が未確認のため開けません」というダイアログが表示される場合は、Mac の [セキュリティとプライバシー] メニューでそのバンドル ファイルを承認する必要があります。

これを行うには、Apple アイコン > [システム環境設定] > [セキュリティとプライバシー] をクリックします。

セキュリティ メニューのページの真ん中あたりに「FirebaseCppApp-<version>.bundle は確認済みの開発元によるものではないため使用をブロックしました」というセクションがあります。

[このまま許可する] ボタンをクリックします。

c35166e224cce720.png

Unity に戻り、もう一度 [再生] を押します。

最初のものと同様の警告が表示されます。

5ad9ddb0d3a52892.png

[開く] を押すと、プログラムを続行でき、以降、この特定のファイルに関する確認メッセージは表示されなくなります。

プロジェクトに有効な構成ファイルがあり、使用されていることを確認する

  1. [File] > [Build Settings] で、ビルドの設定に目的のターゲット(iOS または Android)が指定されていることを確認します。詳細については、Unity のビルド設定に関するドキュメントをご覧ください。
  2. アプリの構成ファイル(Android の場合は google-services.json、iOS の場合は GoogleService-Info.plist)をダウンロードし、Firebase コンソールの [プロジェクトの設定] > [アプリ] からターゲットをビルドします。これらのファイルがすでに存在する場合は、プロジェクトから削除し、最新バージョンに置き換えます。ファイル名には (1) などの数字は付けずに、上記のとおり正確に入力してください。
  3. コンソールに Assets/StreamingAssets/ のファイルに関するメッセージが表示される場合は、Unity がそのファイルを編集できなかったことを示すメッセージがないことを確認します。
  4. Assets/StreamingAssets/google-services-desktop.json が生成され、ダウンロードした構成ファイルと一致することを確認します。
    • 自動的に生成されず、StreamingAssets/ が存在しない場合は、Assets ディレクトリに手動でディレクトリを作成します。
    • Unity が google-services-desktop.json を生成したかどうかを確認します。

すべての Firebase プロダクトと EDM4U.unitypackage または Unity Package Manager のいずれかでインストールされていることを確認する

  1. Assets/ フォルダと Unity Package Manager の両方を確認して、Firebase SDK と EDM4U がどちらか一方の方法でインストールされていることを確認します。
  2. Google が開発したプラグイン(Google Play やサードパーティのプラグインなど)には EDM4U に依存するものがあります。そうしたプラグインでは、.unitypackage または Unity Package Manager(UPM)パッケージに EDM4U が含まれている場合があります。プロジェクトに EDM4U のコピーが 1 つだけ含まれていることを確認します。UPM パッケージが EDM4U に依存している場合は、Unity 用 Google API のアーカイブ ページにある EDM4U の UPM バージョンのみ保持することをおすすめします。

プロジェクト内のすべての Firebase プロダクトが同じバージョンであることを確認する

  1. Firebase SDK が .unitypackage を介してインストールされている場合は、Assets/Firebase/Plugins/x86_64/ にあるすべての FirebaseCppApp ライブラリが同じバージョンかどうか確認します。
  2. Firebase SDK が Unity Package Manager(UPM)を介してインストールされている場合は、[Windows] > [Package Manager] を開き、「Firebase」を検索して、すべての Firebase パッケージが同じバージョンであることを確認します。
  3. プロジェクトに異なるバージョンの Firebase SDK が含まれている場合は、すべての Firebase SDK を完全に削除してから、再度すべての Firebase SDK を同じバージョンでインストールすることをおすすめします。この移行のセクションで説明しているように、すべての Firebase パッケージを削除するのが最もクリーンな方法です。

リゾルバと対象デバイスのビルドエラー

エディタでゲームが動作する場合(目的の適切なビルド ターゲット用に構成されている場合)は、External Dependency Manager for Unity(EDM4U)が正しく構成され、機能していることを確認します。

EDM4U GitHub リポジトリには、プロセスのこの部分に関する設定ガイドが含まれています。作業を進める前に確認してください。

単一の DEX ファイルの問題と圧縮(Cloud Firestore を使用する場合は必須)

Android アプリのビルド時に、単一の DEX ファイルに関連するビルドエラーが発生する場合があります。プロジェクトで Gradle ビルドシステムを使用するように構成されている場合は、次のようなエラー メッセージが表示されます。

Cannot fit requested classes in a single dex file.

.dex ファイルは、Android アプリのクラス定義とそれに関連する付属データのセットを保持するために使用されます。単一の DEX ファイルでは、参照できるメソッドが 65,536 個に制限されており、プロジェクト内のすべての Android ライブラリのメソッドの合計数がこの上限を超えると、ビルドが失敗します。

次の 2 つの手順を順番に実施します。Multidex は、圧縮しても問題が解消されない場合にのみ有効にします。

圧縮を有効にする

Unity は、使用されていないコードを取り除くため、2017.2 で圧縮を導入しました。これにより、単一の DEX ファイル内で参照されるメソッドの総数を減らすことができます。このオプションは [Player Settings] > [Android] > [Publishing Settings] > [Minify] にあります。これらのオプションは Unity のバージョンによって異なる可能性があるため、Unity の公式ドキュメントをご覧ください。

Multidex を有効にする

圧縮を有効にした後も、参照されるメソッドの数が上限を超える場合は、multidex を有効にします。Unity でこれを行う方法はいくつかあります。

  • [Player Settings] の下で [Custom Gradle Template] が有効になっている場合は、mainTemplate.gradle を修正します。
  • Android Studio を使用してエクスポートされたプロジェクトをビルドする場合は、モジュール レベルの build.gradle ファイルを変更します。

詳しくは、Multidex のユーザーガイドをご覧ください。

対象デバイスのランタイム エラーの把握と修正

ゲームがエディタで動作し、対象デバイス用にビルドしてインストールできるときにランタイム エラーが発生した場合は、デバイス上に生成されたログを調査します。

このセクションでは、ログを参照して考えられるエラーを調べ、デバイスまたはシミュレーターで実行時にのみ発生するエラーを解決する方法について説明します。

Android

シミュレータ

  • エミュレーターのコンソールに表示されたログを調べます。また、[Logcat] ウィンドウを確認します。

デバイス

adbadb logcat の使用方法を確認ください。

  • コマンドライン環境のさまざまなツールで出力をフィルタリングすることもできますが、logcat のオプションも調べてみてください。
  • クリーンな状態で ADB セッションを開始する簡単な方法は次のとおりです。

    adb logcat -c && adb logcat <OPTIONS>

    ここで、OPTIONS は、コマンドラインを渡して出力をフィルタするためのフラグです。

Android Studio で Logcat を使用する

Android Studio で Logcat を使用すると、追加の検索ツールを使用して、効率の良い検索を簡単に実行できます。

iOS

ログを調べる

実機を実行している場合は、それをパソコンに接続します。Xcode で lldb を調べます。

Swift の問題

Swift に関するエラーログが表示される場合は、「External Dependency Manager for Unity」のセクションをご覧ください。

次のステップ

ゲームに Firebase に関連するコンパイル、ビルド、実行の問題がまだ残っている場合は、Firebase SDK for Unity の問題のページを調べて、新しい問題を報告してください。また、Firebase のサポートページで別の方法を確認してください。