Debug del processo di build, installazione ed esecuzione del gioco

Introduzione

Di seguito è riportata una guida al debug del processo di compilazione e build per i giochi Unity che utilizzano l'SDK Firebase per Unity. Descrive come esaminare e risolvere molti dei problemi più comuni che puoi riscontrare durante la configurazione e la creazione del gioco per una nuova piattaforma o dopo un aggiornamento. Sono disposti in ordine di quando potrebbero verificarsi nel processo. Consulta i messaggi nell'ordine in cui vengono visualizzati e procedi man mano che vengono risolti.

Oltre a questo documento, per ulteriori informazioni consulta le domande frequenti su Firebase per Unity.

Problemi di compilazione della modalità Play

La prima classe di problemi di build può verificarsi durante il test nell'editor prima di tentare di avviare una build mobile. Questa sezione riguarda tutti gli errori di Firebase che si verificano prima e durante la modalità Play.

Quando Unity si avvia o rileva modifiche a dipendenze, codice o altre risorse, tenta di ricompilare il progetto. Se il progetto non può essere compilato in quel momento, l'editor registra gli errori di compilazione nella console e, se tenti di entrare in modalità Play, riceverai un popup di errore nella scheda Scena di Unity con il messaggio All compiler errors have to be fixed before you can enter playmode!.

Tipi, classi, metodi e membri mancanti

Molti problemi di Firebase si verificano perché l'editor e il compilatore non riescono a trovare i tipi, le classi, i metodi e i membri necessari. I sintomi più comuni sono varianti dei seguenti:

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>'

Passaggi per la risoluzione:
  1. Se utilizzi classi o metodi Firebase nel codice, assicurati di renderli disponibili inserendo le direttive using corrette per i prodotti Firebase specifici necessari.

    1. Esempi tratti da MechaHamster: Level Up With Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Verifica di aver importato i pacchetti Firebase appropriati:

    1. Per importare i pacchetti appropriati:
      1. Aggiungi l'SDK Firebase Unity come .unitypackages o
      2. Esamina ed esegui una delle alternative in Opzioni di installazione aggiuntive di Unity.
    2. Assicurati che ogni prodotto Firebase nel tuo progetto e in EDM4U:
      • Hanno la stessa versione
      • Sono stati installati esclusivamente come .unitypackage O esclusivamente tramite Unity Package Manager.
  3. Se hai importato l'SDK Firebase Unity prima della versione "10.0.0" come .unitypackages, l'archivio zip dell'SDK Firebase Unity contiene pacchetti per il supporto di .NET 3.x e .NET 4.x. Assicurati di aver incluso nel progetto solo il livello .NET Framework compatibile:

    1. La compatibilità tra le versioni di Unity Editor e i livelli di .NET Framework è descritta in Aggiungere Firebase al progetto Unity.
    2. Se hai importato accidentalmente i pacchetti Firebase al livello .NET Framework errato o devi passare dall'utilizzo di .unitypackage a una delle opzioni di installazione di Unity aggiuntive , il modo più semplice è rimuovere ogni pacchetto Firebase tramite i metodi menzionati in questa sezione sulla migrazione e poi reimportare tutti i pacchetti Firebase.
  4. Verifica che l'editor stia ricompilando il progetto e che i tuoi tentativi di riproduzione riflettano lo stato più recente del progetto:

    1. Per impostazione predefinita, l'editor Unity è configurato per la ricompilazione ogni volta che vengono rilevate modifiche alle risorse o alla configurazione.
    2. È possibile che questa funzionalità sia stata disattivata e che l'editor Unity sia impostato su aggiornamento/ricompilazione manuale. Esamina questo aspetto e prova un aggiornamento manuale, se necessario.

Errori di runtime della modalità di gioco

Se il gioco si avvia, ma si verificano problemi con Firebase durante l'esecuzione, prova a procedere nel seguente modo:

Assicurati di approvare i bundle Firebase in "Sicurezza e privacy" su Mac OS

Se, all'avvio del gioco nell'editor su Mac OS, viene visualizzata la finestra di dialogo"Impossibile aprire FirebaseCppApp-<version>.bundle perché non è possibile verificare lo sviluppatore ", devi approvare il file bundle specifico nel menu Sicurezza e privacy di Mac.

Per farlo, fai clic sull'icona Apple > Preferenze di Sistema > Sicurezza e Privacy.

Nel menu di sicurezza, a circa metà pagina, è presente una sezione che indica che ""FirebaseCppApp-<version>.bundle" è stato bloccato perché non proviene da uno sviluppatore identificato."

Fai clic sul pulsante Consenti comunque.

c35166e224cce720.png

Torna a Unity e premi di nuovo Play.

Verrà visualizzato un avviso simile al primo:

5ad9ddb0d3a52892.png

Premi Apri e il programma potrà procedere; non ti verrà più chiesto di questo particolare file.

Assicurati che il progetto contenga e utilizzi file di configurazione validi

  1. Assicurati che le impostazioni di build siano impostate per la piattaforma di destinazione che preferisci (iOS o Android) in File > Build Settings (File > Impostazioni di build). Per una discussione più completa, consulta la documentazione sulle impostazioni di build di Unity.
  2. Scarica il file di configurazione per la tua app (google-services.json per Android o GoogleService-Info.plist per iOS) e crea la destinazione dalla console Firebase in Impostazioni progetto > Le tue app: Se hai già questi file, eliminali dal progetto e sostituiscili con la versione più recente, assicurandoti che siano scritti esattamente come mostrato sopra, senza "(1)" o altri numeri allegati ai nomi dei file.
  3. Se la console contiene un messaggio relativo ai file in Assets/StreamingAssets/, assicurati che non ci siano messaggi della console che indicano che Unity non è riuscito a modificare i file in questa posizione.
  4. Assicurati che Assets/StreamingAssets/google-services-desktop.json sia generato e corrisponda al file di configurazione scaricato.
    • Se non viene generato automaticamente e StreamingAssets/ non esiste, crea manualmente la directory nella directory Assets.
    • Controlla se Unity ha generato google-services-desktop.json.

Assicurati che ogni prodotto Firebase e EDM4U siano stati installati esclusivamente tramite .unitypackage o Unity Package Manager

  1. Controlla sia la cartella Assets/ sia Unity Package Manager per assicurarti che gli SDK Firebase e EDM4U siano stati installati esclusivamente con uno dei due metodi.
  2. Alcuni plug-in sviluppati da Google, come Google Play, e plug-in di terze parti potrebbero dipendere da EDM4U. Questi plug-in potrebbero includere EDM4U nei loro pacchetti .unitypackage o Unity Package Manager (UPM). Assicurati che nel tuo progetto esista una sola copia di EDM4U. Se uno dei pacchetti UPM dipende da EDM4U, è meglio conservare solo le versioni UPM di EDM4U, che si trovano nella pagina dell'archivio delle API di Google per Unity.

Assicurati che tutti i prodotti Firebase nel tuo progetto abbiano la stessa versione.

  1. Se gli SDK Firebase sono stati installati tramite .unitypackage, controlla se tutte le librerie FirebaseCppApp in Assets/Firebase/Plugins/x86_64/ hanno la stessa versione.
  2. Se gli SDK Firebase sono stati installati tramite Unity Package Manager (UPM), apri Windows > Package Manager, cerca "Firebase" e assicurati che tutti i pacchetti Firebase abbiano la stessa versione.
  3. Se il tuo progetto contiene versioni diverse degli SDK Firebase, ti consigliamo di rimuoverli tutti prima di installarli di nuovo, questa volta con le stesse versioni. Il modo più pulito è rimuovere ogni pacchetto Firebase tramite i metodi menzionati in questa sezione sulla migrazione.

Errori di build del resolver e del dispositivo di destinazione

Se il gioco funziona nell'editor (configurato per il target di build appropriato che hai scelto), verifica che External Dependency Manager for Unity (EDM4U) sia configurato e funzioni correttamente.

Il repository GitHub EDM4U contiene una guida passo passo per questa parte della procedura, che devi esaminare e seguire prima di procedere.

Problemi di "Single Dex" e minificazione (obbligatorio se utilizzi Cloud Firestore)

Durante la creazione di un'app per Android, potresti riscontrare un errore di build correlato alla presenza di un singolo file dex. Il messaggio di errore è simile al seguente (se il tuo progetto è configurato per utilizzare il sistema di build Gradle):

Cannot fit requested classes in a single dex file.

I file .dex vengono utilizzati per contenere un insieme di definizioni di classi e i relativi dati aggiuntivi per le applicazioni Android. Un singolo file dex è limitato al riferimento a 65.536 metodi; le build non andranno a buon fine se il numero totale di metodi di tutte le librerie Android nel tuo progetto supera questo limite.

I due passaggi seguenti possono essere applicati in sequenza. Attiva multidex solo se la minimizzazione non risolve il problema.

Attiva la minimizzazione

Unity ha introdotto la minimizzazione nella versione 2017.2 per rimuovere il codice inutilizzato, il che può ridurre il numero totale di metodi a cui viene fatto riferimento in un singolo file dex. * L'opzione si trova in Impostazioni del giocatore > Android > Impostazioni di pubblicazione > Minify. * Le opzioni potrebbero variare nelle diverse versioni di Unity, quindi consulta la documentazione ufficiale di Unity.

Abilitare multidex

Se, dopo aver attivato la minimizzazione, il numero di metodi a cui viene fatto riferimento supera ancora il limite, un'altra opzione è attivare multidex. Esistono diversi modi per farlo in Unity:

  • Se l'opzione Modello Gradle personalizzato in Impostazioni del player è attivata, modifica mainTemplate.gradle.
  • Se utilizzi Android Studio per creare il progetto esportato, modifica il file build.gradle a livello di modulo.

Per ulteriori dettagli, consulta la guida dell'utente multidex.

Comprendere e correggere gli errori di runtime del dispositivo di destinazione

Se il gioco funziona nell'editor e può essere creato e installato sul dispositivo di destinazione, ma si verificano errori di runtime, esamina e analizza i log generati sul dispositivo.

Questa sezione spiega come esaminare i log per individuare possibili errori e un errore di questo tipo che si verifica solo in fase di runtime sul dispositivo o sul simulatore.

Android

Simulatore

  • Esamina i log visualizzati nella console dell'emulatore o visualizza la finestra Logcat.

Dispositivo

Acquisisci familiarità con adb e adb logcat e con il loro utilizzo.

  • Sebbene tu possa utilizzare i vari strumenti dell'ambiente della riga di comando per filtrare l'output, valuta la possibilità di esaminare le opzioni di logcat.
  • Un modo semplice per avviare una sessione ADB con una tabula rasa è:

    adb logcat -c && adb logcat <OPTIONS>

    dove OPTIONS sono i flag che passi alla riga di comando per filtrare l'output.

Utilizzo di Logcat tramite Android Studio

Quando utilizzi Logcat tramite Android Studio, sono disponibili strumenti di ricerca aggiuntivi che semplificano la generazione di ricerche produttive.

iOS

Esame dei log

Se esegui un dispositivo fisico, collegalo al computer. Controlla lldb in Xcode.

Problemi con Swift

Se nei log degli errori vengono menzionati swift, consulta la sezione External Dependency Manager per Unity.

Passaggi successivi

Se il tuo gioco presenta ancora problemi di compilazione, build o esecuzione correlati a Firebase, esamina la pagina dei problemi dell'SDK Firebase per Unity e valuta la possibilità di segnalare un nuovo problema. Inoltre, consulta la pagina di assistenza di Firebase per scoprire altre opzioni.