Déboguer le processus de compilation, d'installation et d'exécution du jeu

Introduction

Le guide suivant explique comment déboguer le processus de compilation et de création pour les jeux Unity à l'aide du SDK Firebase pour Unity. Il décrit comment examiner et résoudre de nombreux problèmes courants que vous pouvez rencontrer lors de la configuration et de la création de votre jeu pour une nouvelle plate-forme ou après une mise à jour. Les erreurs sont classées par ordre d'apparition dans le processus. Consultez-les dans l'ordre et passez à la suivante une fois que vous avez résolu la précédente.

En plus de ce document, consultez les questions fréquentes sur Firebase pour Unity pour en savoir plus.

Problèmes de compilation en mode Play

La première catégorie de problèmes de compilation peut se produire lors des tests dans l'éditeur avant de commencer une compilation mobile. Cette section concerne toutes les erreurs Firebase qui se produisent avant et pendant le mode Play.

Lorsque Unity démarre ou détecte des modifications apportées aux dépendances, au code ou à d'autres éléments, il tente de recréer le projet. Si le projet ne peut pas être compilé à ce moment-là, l'éditeur enregistre les erreurs de compilation dans la console. Si vous tentez de passer en mode Play, une fenêtre pop-up d'erreur s'affiche dans l'onglet Scene (Scène) de Unity, indiquant All compiler errors have to be fixed before you can enter playmode! (Vous devez corriger toutes les erreurs du compilateur avant de pouvoir passer en mode Play !).

Types, classes, méthodes et membres manquants

De nombreux problèmes Firebase sont dus à l'incapacité de l'éditeur et du compilateur à trouver les types, classes, méthodes et membres nécessaires. Les symptômes courants sont les suivants :

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

Procédure de résolution :
  1. Lorsque vous utilisez des classes ou des méthodes Firebase dans le code, assurez-vous de les rendre disponibles en utilisant les directives using appropriées pour les produits Firebase spécifiques nécessaires.

    1. Exemples tirés de MechaHamster: Level Up With Firebase Edition:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Vérifiez que vous avez importé les packages Firebase appropriés :

    1. Pour importer les packages appropriés, procédez comme suit :
      1. Ajoutez le SDK Unity Firebase en tant que .unitypackages ou
      2. Examinez et effectuez l'une des alternatives dans Options d'installation Unity supplémentaires.
    2. Assurez-vous que chaque produit Firebase de votre projet et EDM4U:
      • sont de la même version ;
      • ont été installés exclusivement en tant que .unitypackages OU exclusivement via le gestionnaire de packages Unity.
  3. Si vous avez importé le SDK Unity Firebase avant la version 10.0.0 en tant que .unitypackages, l'archive ZIP du SDK Unity Firebase contient des packages pour la compatibilité avec .NET 3.x et .NET 4.x. Assurez-vous de n'avoir inclus que le niveau de .NET Framework compatible dans votre projet :

    1. La compatibilité entre les versions de l'éditeur Unity et les niveaux de .NET Framework est abordée dans Ajouter Firebase à votre projet Unity.
    2. Si vous avez importé accidentellement vos packages Firebase au mauvais niveau de .NET Framework ou si vous devez passer de l'utilisation de .unitypackages à l'une des options d'installation Unity supplémentaires, le moyen le plus simple consiste à supprimer tous les packages Firebase à l'aide des méthodes mentionnées dans cette section de migration, puis à réimporter tous les packages Firebase.
  4. Vérifiez que votre éditeur recrée votre projet et que vos tentatives de lecture reflètent l'état le plus récent de votre projet :

    1. Par défaut, l'éditeur Unity est configuré pour se reconstruire chaque fois que des modifications sont détectées dans les éléments ou la configuration.
    2. Il est possible que cette fonctionnalité ait été désactivée et que l'éditeur Unity soit configuré pour une actualisation/recompilation manuelle. Examinez ce point et essayez une actualisation manuelle si c'est le cas.

Erreurs d'exécution en mode Play

Si votre jeu démarre, mais rencontre des problèmes avec Firebase lors de son exécution, procédez comme suit :

Assurez-vous d'approuver les bundles Firebase dans "Security & Privacy" (Sécurité et confidentialité) sur Mac OS

Si, au démarrage de votre jeu dans l'éditeur sur Mac OS, une boîte de dialogue s'affiche et indique "FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified." (Impossible d'ouvrir FirebaseCppApp-<version>.bundle, car le développeur n'a pas pu être vérifié), vous devez approuver ce fichier de bundle spécifique dans le menu Security & Privacy (Sécurité et confidentialité) de Mac.

Pour ce faire, cliquez sur Apple Icon (Icône Apple) > System Preferences (Préférences système) > Security & Privacy (Sécurité et confidentialité).

Dans le menu de sécurité, à environ la moitié de la page, une section indique ""FirebaseCppApp-<version>.bundle" was blocked from use because it is not from an identified developer." ("FirebaseCppApp-<version>.bundle" a été bloqué, car il ne provient pas d'un développeur identifié.)

Cliquez sur le bouton Allow Anyway (Autoriser quand même).

c35166e224cce720.png

Revenez à Unity et appuyez de nouveau sur Play (Lecture).

Un avertissement semblable au premier s'affiche :

5ad9ddb0d3a52892.png

Appuyez sur Open (Ouvrir) pour que votre programme puisse continuer. Vous ne serez plus invité à utiliser ce fichier.

Assurez-vous que votre projet contient et utilise des fichiers de configuration valides

  1. Assurez-vous que vos paramètres de compilation sont définis pour la cible souhaitée (iOS ou Android) dans File > Build Settings (Fichier > Paramètres de compilation). Pour une discussion plus complète, consultez la documentation sur les paramètres de compilation Unity.
  2. Téléchargez le fichier de configuration de votre application (google-services.json pour Android ou GoogleService-Info.plist pour iOS) et ciblez la compilation à partir de la console Firebase dans Project Settings > Your Apps : Si vous disposez déjà de ces fichiers, supprimez-les de votre projet et remplacez-les par la version la plus récente, en vous assurant qu'ils sont orthographiés exactement comme indiqué ci-dessus, sans "(1)" ni autre chiffre ajouté aux noms de fichiers.
  3. Si la console contient un message concernant des fichiers dans Assets/StreamingAssets/, assurez-vous qu'aucun message de la console n'indique que Unity n'a pas pu modifier les fichiers à cet emplacement.
  4. Assurez-vous que Assets/StreamingAssets/google-services-desktop.json est généré et correspond au fichier de configuration téléchargé.
    • S'il n'est pas généré automatiquement et que StreamingAssets/ n'existe pas, créez manuellement le répertoire dans le répertoire Assets.
    • Vérifiez si Unity a généré google-services-desktop.json.

Assurez-vous que chaque produit Firebase et EDM4U ont été installés exclusivement via .unitypackage ou le gestionnaire de packages Unity

  1. Vérifiez le dossier Assets/ et le gestionnaire de packages Unity pour vous assurer que les SDK Firebase et EDM4U ont été installés exclusivement via l'une ou l'autre méthode.
  2. Certains plug-ins développés par Google, tels que Google Play, et des plug-ins tiers peuvent dépendre d'EDM4U. Ces plug-ins peuvent inclure EDM4U dans leurs .unitypackages ou Unity Package Manager (UPM) packages. Assurez-vous qu'il n'existe qu'une seule copie d'EDM4U dans votre projet. Si des packages UPM dépendent d'EDM4U, il est préférable de ne conserver que les versions UPM d'EDM4U, que vous trouverez sur la page d'archive des API Google pour Unity.

Assurez-vous que chaque produit Firebase de votre projet est de la même version.

  1. Si les SDK Firebase ont été installés via .unitypackage, vérifiez si toutes les bibliothèques FirebaseCppApp sous Assets/Firebase/Plugins/x86_64/ sont de la même version.
  2. Si les SDK Firebase ont été installés via le gestionnaire de packages Unity (UPM), ouvrez Windows > Package Manager (Fenêtres > Gestionnaire de packages), recherchez "Firebase" et assurez-vous que tous les packages Firebase sont de la même version.
  3. Si votre projet contient différentes versions des SDK Firebase, nous vous recommandons de supprimer complètement tous les SDK Firebase avant de les réinstaller, cette fois avec les mêmes versions. Le moyen le plus simple consiste à supprimer tous les packages Firebase à l'aide des méthodes mentionnées dans cette section de migration.

Erreurs de compilation du résolveur et de l'appareil cible

Si votre jeu fonctionne dans l'éditeur (configuré pour la cible de compilation appropriée de votre choix), vérifiez ensuite que le gestionnaire de dépendances externes pour Unity (EDM4U) est correctement configuré et fonctionne.

Le dépôt GitHub EDM4U contient un guide pas à pas pour cette partie du processus. Vous devez le consulter et le suivre avant de continuer.

Problèmes liés à "Single Dex" et à la minification (Obligatoire si vous utilisez Cloud Firestore)

Lors de la création d'une application Android, vous pouvez rencontrer un échec de compilation lié à un seul fichier dex. Le message d'erreur ressemble à ceci (si votre projet est configuré pour utiliser le système de compilation Gradle) :

Cannot fit requested classes in a single dex file.

Les fichiers .dex sont utilisés pour contenir un ensemble de définitions de classes et leurs données auxiliaires associées pour les applications Android. Un seul fichier dex est limité à la référence à 65 536 méthodes. Les compilations échouent si le nombre total de méthodes de toutes les bibliothèques Android de votre projet dépasse cette limite.

Les deux étapes suivantes peuvent être appliquées de manière séquentielle. N'activez multidex que si la minification ne résout pas le problème.

Activer la minification

Unity a introduit la minification dans la version 2017.2 pour supprimer le code inutilisé, ce qui peut réduire le nombre total de méthodes référencées dans un seul fichier dex. * L'option se trouve dans Player Settings > Android > Publishing Settings > Minify (Paramètres du lecteur > Android > Paramètres de publication > Minifier). * Les options peuvent varier selon les versions d'Unity. Consultez donc la documentation officielle d'Unity.

Activer multidex

Si, après avoir activé la minification, le nombre de méthodes référencées dépasse toujours la limite, vous pouvez activer multidex. Il existe plusieurs façons de procéder dans Unity :

  • Si l'option Custom Gradle Template (Modèle Gradle personnalisé) sous Player Settings (Paramètres du lecteur) est activée, modifiez mainTemplate.gradle.
  • Si vous utilisez Android Studio pour créer le projet exporté, modifiez le fichier build.gradle au niveau du module.

Pour en savoir plus, consultez le guide de l'utilisateur multidex.

Comprendre et corriger les erreurs d'exécution de l'appareil cible

Si votre jeu fonctionne dans l'éditeur et peut être créé et installé sur votre appareil cible, mais que vous rencontrez des erreurs d'exécution, inspectez et examinez les journaux générés sur l'appareil.

Cette section explique comment examiner vos journaux pour détecter d'éventuelles erreurs, et une erreur de ce type qui ne se produit qu'au moment de l'exécution sur l'appareil ou le simulateur.

Android

Simulateur

  • Inspectez les journaux affichés dans la console de votre émulateur ou affichez la fenêtre Logcat.

Appareil

Familiarisez-vous avec adb et adb logcat, et apprenez à les utiliser.

  • Bien que vous puissiez utiliser les différents outils de votre environnement de ligne de commande pour filtrer la sortie, vous pouvez également examiner les options de logcat.
  • Voici une façon simple de démarrer une session ADB avec une ardoise propre :

    adb logcat -c && adb logcat <OPTIONS>

    OPTIONS sont les indicateurs que vous transmettez à la ligne de commande pour filtrer la sortie.

Utiliser Logcat via Android Studio

Lorsque vous utilisez Logcat via Android Studio, des outils de recherche supplémentaires sont disponibles pour simplifier la génération de recherches productives.

iOS

Inspecter les journaux

Si vous exécutez un appareil physique, connectez-le à votre ordinateur. Inspectez lldb dans Xcode.

Problèmes Swift

Si vous rencontrez des journaux d'erreurs mentionnant Swift, consultez la section Gestionnaire de dépendances externes pour Unity à leur sujet.

Étapes supplémentaires

Si votre jeu présente toujours des problèmes de compilation, de création ou d'exécution liés à Firebase, examinez la page Problèmes liés au SDK Firebase pour Unity et envisagez de signaler un nouveau problème. Consultez également la page d'assistance Firebase pour en savoir plus sur les options supplémentaires.