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 possono verificarsi durante la configurazione e la creazione del gioco per una nuova piattaforma o dopo un aggiornamento. È organizzata in base al momento in cui questi errori possono verificarsi nel processo. Consultali in ordine e procedi man mano che vengono risolti.

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

Problemi di compilazione della modalità Play

La prima classe di problemi di build può verificarsi durante il test nell'editor prima di provare ad 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 alle dipendenze, al codice o ad altre risorse, tenta di ricompilare il progetto. Se il progetto non è in grado di compilare in quel momento, l'editor registra gli errori di compilazione nella console e, se tenti di accedere alla 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 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 di risoluzione:
  1. Se utilizzi classi o metodi Firebase nel codice, assicurati di renderli disponibili utilizzando le direttive using corrette per i prodotti Firebase specifici necessari.

    1. Esempi 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 di Unity aggiuntive.
    2. Assicurati che ogni prodotto Firebase nel tuo progetto e EDM4U:
      • Siano alla stessa versione
      • Siano stati installati esclusivamente come .unitypackage OPPURE esclusivamente tramite Unity Package Manager.
  3. Se hai importato l'SDK Firebase Unity prima della versione "10.0.0" come .unitypackage, 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 di .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 di .NET Framework errato o devi passare dall'utilizzo di .unitypackage a una delle opzioni di installazione di Unity aggiuntive , il modo più semplice è rimuovere tutti i pacchetti Firebase utilizzando i metodi descritti in questa sezione di migrazione e poi reimportare di nuovo tutti i pacchetti Firebase.
  4. Verifica che l'editor stia ricompilando il progetto e che i tentativi di riproduzione riflettano lo stato più recente del progetto:

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

Errori di runtime della modalità Play

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

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

Se, all'avvio del gioco nell'editor su macOS, viene visualizzata una finestra di dialogo con il messaggio "FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified.", devi approvare il file bundle specifico nel menu Sicurezza e privacy di macOS.

Per farlo, fai clic su Icona Apple > Preferenze di Sistema > Sicurezza e privacy.

Nel menu di sicurezza, a circa metà pagina, è presente una sezione con il messaggio ""FirebaseCppApp-<version>.bundle" was blocked from use because it is not from an identified developer."

Fai clic sul pulsante Consenti comunque.

c35166e224cce720.png

Torna a Unity e premi di nuovo Riproduci.

Verrà visualizzato un avviso simile al primo:

5ad9ddb0d3a52892.png

Premi Apri e il programma potrà procedere. Non ti verrà chiesto di nuovo di questo file specifico.

Assicurati che il progetto contenga e utilizzi file di configurazione validi

  1. Assicurati che le impostazioni di build siano impostate per la destinazione che intendi utilizzare (iOS o Android) in 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 l'app (google-services.json per Android o GoogleService-Info.plist per iOS) e la destinazione di build 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 tramite 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 pacchetti .unitypackage o Unity Package Manager (UPM). Assicurati che nel progetto sia presente una sola copia di EDM4U. Se alcuni pacchetti UPM dipendono da EDM4U, è preferibile conservare solo le versioni UPM di EDM4U, che sono disponibili nella pagina dell'archivio delle API di Google per Unity.

Assicurati che ogni prodotto Firebase nel tuo progetto sia alla stessa versione.

  1. Se gli SDK Firebase sono stati installati tramite .unitypackage, controlla se tutte le librerie FirebaseCppApp in Assets/Firebase/Plugins/x86_64/ sono alla stessa versione.
  2. Se gli SDK Firebase sono stati installati tramite Unity Package Manager (UPM), apri Finestre > Package Manager, cerca "Firebase" e assicurati che tutti i pacchetti Firebase siano alla stessa versione.
  3. Se il progetto contiene versioni diverse degli SDK Firebase, ti consigliamo di rimuovere completamente tutti gli SDK Firebase prima di installarli di nuovo, questa volta con le stesse versioni. Il modo più semplice è rimuovere tutti i pacchetti Firebase utilizzando i metodi descritti in questa sezione di migrazione.

Errori di build del resolver e del dispositivo di destinazione

Se il gioco funziona nell'editor (configurato per la destinazione di build appropriata di tua scelta), verifica che External Dependency Manager for Unity (EDM4U) sia configurato e funzioni correttamente.

Il repository GitHub di 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 progetto è configurato per utilizzare il sistema di compilazione Gradle):

Cannot fit requested classes in a single dex file.

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

I due passaggi seguenti possono essere applicati in sequenza; abilita multidex solo se la minificazione non risolve il problema.

Abilita la minificazione

Unity ha introdotto la minificazione 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 è disponibile in Impostazioni giocatore > Android > Impostazioni di pubblicazione > Minify. * Le opzioni possono variare nelle diverse versioni di Unity, quindi consulta la documentazione ufficiale di Unity.

Abilita multidex

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

  • Se l'opzione Modello Gradle personalizzato in Impostazioni giocatore è abilitata, 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 utente di 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 configurazione pulita è:

    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

Esaminare i log

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

Problemi di Swift

Se nei log degli errori viene menzionato Swift, consulta la sezione External Dependency Manager for Unity.

Passaggi successivi

Se il gioco continua a presentare problemi di compilazione, build o esecuzione relativi 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.