Einführung
Im Folgenden finden Sie eine Anleitung zum Debuggen des Kompilierungs- und Build-Prozesses für Unity-Spiele mit dem Firebase SDK für Unity. Darin wird beschrieben, wie Sie viele der häufigsten Probleme untersuchen und beheben können, die bei der Konfiguration und Entwicklung Ihres Spiels für eine neue Plattform oder nach einem Update auftreten können. Die Fehler sind nach dem Zeitpunkt ihres möglichen Auftretens im Prozess sortiert. Gehen Sie die einzelnen Punkte der Reihe nach durch und fahren Sie fort, sobald ein Problem behoben wurde.
Zusätzlich zu diesem Dokument finden Sie weitere Informationen in den häufig gestellten Fragen zu Firebase für Unity.
Probleme bei der Kompilierung im Play-Modus
Die erste Art von Build-Problemen kann beim Testen im Editor auftreten, bevor Sie versuchen, einen mobilen Build zu starten. Dieser Abschnitt bezieht sich auf alle Firebase-Fehler, die vor und während des Play-Modus auftreten.
Wenn Unity startet oder Änderungen an Abhängigkeiten, Code oder anderen Assets erkennt, wird versucht, das Projekt neu zu erstellen. Wenn das Projekt zu diesem Zeitpunkt nicht kompiliert werden kann, werden im Editor Kompilierungsfehler in der Konsole protokolliert. Wenn Sie versuchen, in den Play-Modus zu wechseln, wird in Unity auf dem Tab Scene ein Fehler-Pop-up mit dem Text All compiler errors have to be fixed before you can enter playmode!
angezeigt.
Kompilierungsprobleme im Zusammenhang mit Firebase beheben
Fehlende Typen, Klassen, Methoden und Elemente
Viele Firebase-Probleme treten auf, weil der Editor und der Compiler erforderliche Typen, Klassen, Methoden und Elemente nicht finden können. Häufige Symptome sind Varianten der folgenden:
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>'
Lösungsschritte:
Wenn Sie Firebase-Klassen oder -Methoden im Code verwenden, müssen Sie dafür sorgen, dass sie durch die richtigen
using
-Direktiven für die benötigten Firebase-Produkte verfügbar sind.Prüfen Sie, ob Sie die entsprechenden Firebase-Pakete importiert haben:
- So importieren Sie die entsprechenden Pakete:
- Firebase Unity SDK als
.unitypackage
s hinzufügen oder - Sehen Sie sich eine der Alternativen unter Zusätzliche Unity-Installationsoptionen an und führen Sie sie aus.
- Firebase Unity SDK als
- Achten Sie darauf, dass für jedes Firebase-Produkt in Ihrem Projekt und EDM4U Folgendes gilt:
- Haben dieselbe Version
- Sie wurden entweder ausschließlich als
.unitypackage
s ODER ausschließlich über den Unity Package Manager installiert.
- So importieren Sie die entsprechenden Pakete:
Wenn Sie das Firebase Unity SDK vor Version 10.0.0 als
.unitypackage
s importiert haben, enthält das ZIP-Archiv des Firebase Unity SDK Pakete für .NET 3.x und .NET 4.x. Achten Sie darauf, dass Sie in Ihrem Projekt nur die kompatible .NET Framework-Ebene angegeben haben:- Die Kompatibilität zwischen Versionen des Unity-Editors und .NET Frameworks Levels wird unter Firebase zu einem Unity-Projekt hinzufügen beschrieben.
- Wenn Sie Ihre Firebase-Pakete versehentlich auf der falschen .NET Framework-Ebene importiert haben oder von der Verwendung von
.unitypackage
s zu einer der zusätzlichen Unity-Installationsoptionen wechseln müssen, ist es am besten, alle Firebase-Pakete mit den in diesem Migrationsabschnitt beschriebenen Methoden zu entfernen und dann alle Firebase-Pakete neu zu importieren.
Prüfen Sie, ob Ihr Editor Ihr Projekt neu erstellt und Ihre Versuche, das Spiel zu spielen, den aktuellen Status Ihres Projekts widerspiegeln:
- Standardmäßig wird der Unity-Editor so konfiguriert, dass er bei jeder Änderung von Assets oder der Konfiguration neu erstellt wird.
- Möglicherweise wurde diese Funktion deaktiviert und der Unity-Editor ist auf manuelles Aktualisieren/Neukompilieren eingestellt. Prüfen Sie, ob dies der Fall ist, und versuchen Sie, die Seite manuell zu aktualisieren.
Laufzeitfehler im Play-Modus
Wenn Ihr Spiel startet, aber während der Ausführung Probleme mit Firebase auftreten, versuchen Sie Folgendes:
Firebase-Bundles in „Sicherheit & Datenschutz“ unter Mac OS genehmigen
Wenn beim Starten des Spiels im Editor unter Mac OS ein Dialogfeld mit der Meldung „FirebaseCppApp-<version>.bundle kann nicht geöffnet werden, da der Entwickler nicht verifiziert werden kann.“ angezeigt wird, müssen Sie diese bestimmte Bundle-Datei im Menü „Sicherheit & Datenschutz“ von Mac genehmigen.
Klicken Sie dazu auf das Apple-Symbol > Systemeinstellungen > Sicherheit und Datenschutz.
Im Sicherheitsmenü, etwa auf halber Höhe der Seite, befindet sich ein Abschnitt mit der Meldung „Die Verwendung von ‚FirebaseCppApp-<version>.bundle‘ wurde blockiert, da die Datei nicht von einem identifizierten Entwickler stammt.“
Klicken Sie auf die Schaltfläche Trotzdem zulassen.
Kehren Sie zu Unity zurück und drücken Sie noch einmal auf Play.
Es wird eine ähnliche Warnung wie die erste angezeigt:
Klicken Sie auf Öffnen. Das Programm kann dann fortgesetzt werden und Sie werden nicht noch einmal nach dieser Datei gefragt.
Prüfen Sie, ob Ihr Projekt gültige Konfigurationsdateien enthält und verwendet.
- Prüfen Sie unter File > Build Settings, ob die Build-Einstellungen für das gewünschte Ziel (iOS oder Android) festgelegt sind. Eine ausführlichere Erläuterung finden Sie in der Dokumentation zu Unity-Build-Einstellungen.
- Laden Sie die Konfigurationsdatei für Ihre App (
google-services.json
für Android oderGoogleService-Info.plist
für iOS) und das Build-Ziel aus der Firebase-Konsole unter Projekteinstellungen > Ihre Apps herunter: Wenn Sie diese Dateien bereits haben, löschen Sie sie in Ihrem Projekt und ersetzen Sie sie durch die aktuelle Version. Achten Sie darauf, dass die Dateinamen genau wie oben geschrieben sind und keine „(1)“ oder andere Zahlen enthalten. - Wenn die Konsole eine Meldung zu Dateien in
Assets/StreamingAssets/
enthält, prüfen Sie, ob es Konsolenmeldungen gibt, die besagen, dass Unity Dateien dort nicht bearbeiten konnte. - Prüfen Sie, ob
Assets/StreamingAssets/google-services-desktop.json
generiert wurde und mit der heruntergeladenen Konfigurationsdatei übereinstimmt.- Wenn es nicht automatisch generiert wird und
StreamingAssets/
nicht vorhanden ist, erstellen Sie das Verzeichnis manuell im VerzeichnisAssets
. - Prüfen Sie, ob Unity
google-services-desktop.json
generiert hat.
- Wenn es nicht automatisch generiert wird und
Achten Sie darauf, dass jedes Firebase-Produkt und EDM4U ausschließlich über .unitypackage
oder den Unity Package Manager installiert wurden.
- Prüfen Sie sowohl den Ordner
Assets/
als auch den Unity Package Manager, um sicherzustellen, dass die Firebase SDKs und EDM4U ausschließlich über eine der beiden Methoden installiert wurden. - Einige von Google entwickelte Plug-ins, z. B. Google Play, und Drittanbieter-Plug-ins sind möglicherweise von EDM4U abhängig. Diese Plug-ins können EDM4U in ihren
.unitypackage
- oder Unity Package Manager-Paketen (UPM) enthalten. Achten Sie darauf, dass in Ihrem Projekt nur eine Kopie von EDM4U vorhanden ist. Wenn UPM-Pakete von EDM4U abhängen, sollten Sie nur die UPM-Versionen von EDM4U beibehalten, die auf der Archivseite für Google APIs for Unity verfügbar sind.
Achten Sie darauf, dass alle Firebase-Produkte in Ihrem Projekt dieselbe Version haben.
- Wenn die Firebase-SDKs über
.unitypackage
installiert wurden, prüfen Sie, ob alleFirebaseCppApp
-Bibliotheken unterAssets/Firebase/Plugins/x86_64/
dieselbe Version haben. - Wenn Firebase SDKs über den Unity Package Manager (UPM) installiert wurden, öffnen Sie Windows > Package Manager, suchen Sie nach „Firebase“ und achten Sie darauf, dass alle Firebase-Pakete dieselbe Version haben.
- Wenn Ihr Projekt verschiedene Versionen von Firebase SDKs enthält, empfehlen wir, alle Firebase SDKs zu entfernen, bevor Sie sie noch einmal installieren. Verwenden Sie dabei die gleichen Versionen. Am besten entfernen Sie alle Firebase-Pakete mit den in diesem Migrationsabschnitt beschriebenen Methoden.
Build-Fehler bei Resolver und Zielgerät
Wenn Ihr Spiel im Editor funktioniert (konfiguriert für das entsprechende Build-Ziel Ihrer Wahl), prüfen Sie als Nächstes, ob der External Dependency Manager for Unity (EDM4U) richtig konfiguriert ist und funktioniert.
Das EDM4U-GitHub-Repository enthält eine detaillierte Anleitung für diesen Teil des Prozesses, die Sie sich ansehen und befolgen sollten, bevor Sie fortfahren.
Probleme mit „Single Dex“ und Minimierung (erforderlich bei Verwendung von Cloud Firestore)
Beim Erstellen einer Android-App kann ein Build-Fehler auftreten, der mit einer einzelnen DEX-Datei zusammenhängt. Die Fehlermeldung sieht etwa so aus (wenn Ihr Projekt für die Verwendung des Gradle-Build-Systems konfiguriert ist):
Cannot fit requested classes in a single dex file.
.dex
-Dateien enthalten eine Reihe von Klassendefinitionen und die zugehörigen Zusatzdaten für Android-Anwendungen. Eine einzelne DEX-Datei darf nur auf 65.536 Methoden verweisen. Builds schlagen fehl,wenn die Gesamtzahl der Methoden aus allen Android-Bibliotheken in Ihrem Projekt dieses Limit überschreitet.
Die folgenden beiden Schritte können nacheinander ausgeführt werden. Aktivieren Sie multidex nur, wenn das Problem durch die Minimierung nicht behoben wird.
Minifizierung aktivieren
Unity hat 2017.2 die Reduzierung eingeführt, um nicht verwendeten Code zu entfernen. Dadurch kann die Gesamtzahl der referenzierten Methoden in einer einzelnen DEX-Datei reduziert werden. * Die Option finden Sie unter Player Settings > Android > Publishing Settings > Minify (Player-Einstellungen > Android > Veröffentlichungseinstellungen > Minimieren). * Die Optionen können sich in verschiedenen Unity-Versionen unterscheiden. Sehen Sie daher in der offiziellen Unity-Dokumentation nach.
Multidex aktivieren
Wenn die Anzahl der referenzierten Methoden nach der Aktivierung der Minimierung immer noch das Limit überschreitet, können Sie multidex
aktivieren. Dazu haben Sie in Unity verschiedene Möglichkeiten:
- Wenn Benutzerdefinierte Gradle-Vorlage unter Playereinstellungen aktiviert ist, ändern Sie
mainTemplate.gradle
. - Wenn Sie Android Studio zum Erstellen des exportierten Projekts verwenden, ändern Sie die build.gradle-Datei auf Modulebene.
Weitere Informationen finden Sie im Nutzerhandbuch für Multidex.
Laufzeitfehler auf Zielgeräten verstehen und beheben
Wenn Ihr Spiel im Editor funktioniert und für Ihr Zielgerät erstellt und darauf installiert werden kann, aber Laufzeitfehler auftreten, sollten Sie die auf dem Gerät generierten Logs untersuchen.
In diesem Abschnitt wird erläutert, wie Sie Ihre Logs auf mögliche Fehler untersuchen und wie Sie einen Fehler beheben, der nur zur Laufzeit auf dem Gerät oder Simulator auftritt.
Android
Simulator
- Sehen Sie sich die Logs in der Konsole des Emulators an oder rufen Sie das Fenster Logcat auf.
Gerät
Machen Sie sich mit adb und adb logcat vertraut und lernen Sie, wie Sie sie verwenden.
- Sie können zwar die verschiedenen Tools Ihrer Befehlszeilenumgebung verwenden, um die Ausgabe zu filtern, aber es empfiehlt sich, stattdessen die Optionen von logcat zu verwenden.
Eine einfache Möglichkeit, eine ADB-Sitzung mit einem sauberen Zustand zu starten, ist:
adb logcat -c && adb logcat <OPTIONS>
Dabei sind
OPTIONS
die Flags, die Sie an die Befehlszeile übergeben, um die Ausgabe zu filtern.
Logcat über Android Studio verwenden
Wenn Sie Logcat über Android Studio verwenden, sind zusätzliche Suchtools verfügbar, die das Erstellen produktiver Suchanfragen vereinfachen.
iOS
Logs ansehen
Wenn Sie ein physisches Gerät verwenden, schließen Sie es an Ihren Computer an. Prüfen Sie lldb in Xcode.
Swift-Probleme
Wenn in Fehlerlogs „swift“ erwähnt wird, lesen Sie den Abschnitt External Dependency Manager for Unity.
Weitere Schritte
Wenn in Ihrem Spiel weiterhin Probleme beim Kompilieren, Erstellen oder Ausführen im Zusammenhang mit Firebase auftreten, sehen Sie sich die Seite mit Problemen zum Firebase SDK für Unity an und erwägen Sie, ein neues Problem zu melden. Weitere Optionen finden Sie auf der Firebase-Supportseite.