Cómo depurar el proceso de compilación, instalación y ejecución de juegos

Introducción

La siguiente guía sirve para depurar el proceso de compilación y compilación de juegos de Unity con el SDK de Firebase para Unity. En ella, se describe cómo investigar y resolver muchos de los problemas habituales que puedes encontrar mientras configuras y compilas tu juego para una plataforma nueva o después de una actualización. Está organizada según el momento en que estos errores pueden ocurrir en el proceso. Consúltalos en orden y avanza a medida que se resuelvan.

Además de este documento, consulta las Preguntas frecuentes de Firebase para Unity para obtener más información.

Problemas de compilación del modo de juego

La primera clase de problema de compilación puede ocurrir durante la prueba en el editor antes de intentar iniciar una compilación para dispositivos móviles. En esta sección, se abordan todos los errores de Firebase que ocurren antes y durante el modo de juego.

Cuando Unity inicie o detecte cambios en las dependencias, el código o algún otro elemento, intentará volver a compilar el proyecto. Si el proyecto no puede compilarse en ese momento, el editor registrará los errores de compilación en la consola y, si intentas ingresar al modo de juego, verás una ventana emergente de error en la pestaña Scene de Unity en la que se indica All compiler errors have to be fixed before you can enter playmode!.

Tipos, clases, métodos y miembros faltantes

Muchos problemas de Firebase se producen debido a la incapacidad del editor y el compilador de encontrar los tipos, las clases, los métodos y los miembros necesarios. Los síntomas comunes de esto son variantes de lo siguiente:

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

Pasos de solución:
  1. Cuando uses clases o métodos de Firebase en el código, asegúrate de que estén disponibles mediante las directivas using correctas para los productos específicos de Firebase necesarios.

    1. Ejemplos de MechaHamster: Sube de nivel con la edición de Firebase:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Verifica que hayas importado los paquetes de Firebase correspondientes:

    1. Para importar los paquetes adecuados, haz lo siguiente:
      1. Agrega el SDK de Firebase Unity como .unitypackage o
      2. Examina y aplica una de las alternativas en Opciones adicionales de instalación de Unity.
    2. Asegúrate de que todos los productos de Firebase en tu proyecto y EDM4U cumplan con los siguientes requisitos:
      • Usan la misma versión.
      • Se hayan instalado como .unitypackage de forma exclusiva O exclusivamente a través de Unity Package Manager.
  3. Si importaste el SDK de Firebase Unity antes de la versión “10.0.0” como .unitypackage, el archivo ZIP del SDK de Firebase Unity contiene paquetes para la compatibilidad con .NET 3.x y .NET 4.x. Asegúrate de haber incluido solo el nivel de .NET Framework compatible en tu proyecto:

    1. La compatibilidad entre las versiones de Unity Editor y los niveles de .NET Frameworks se analiza en Agrega Firebase a tu proyecto de Unity.
    2. Si importaste accidentalmente tus paquetes de Firebase en el nivel de .NET Framework incorrecto o necesitas dejar de usar .unitypackage en una de las opciones de instalación adicionales de Unity, la forma más adecuada es quitar todos los paquetes de Firebase mediante los métodos que se mencionan en esta sección sobre la migración y, luego, volver a importarlos.
  4. Verifica que el editor vuelva a compilar tu proyecto y que los intentos de juego reflejen el estado más actual del proyecto:

    1. De forma predeterminada, el editor de Unity está configurado para volver a compilarse cuando se detectan cambios en los elementos o la configuración.
    2. Es posible que se haya inhabilitado esta función y que Unity Editor esté configurado para tener que actualizarlo o compilarlo nuevamente de forma manual. Verifica esto y prueba actualizarlo manualmente si ese es el caso.

Errores en el tiempo de ejecución del modo de juego

Si se inicia el juego, pero tiene problemas con Firebase mientras se ejecuta, prueba lo siguiente:

Asegúrate de aprobar los paquetes de Firebase en “Seguridad y privacidad” en MacOS

Si, cuando inicias tu juego en el editor de MacOS, aparece un diálogo que dice: “FirebaseCppApp-<version>.bundle Cannot be opened because the developer cannot be verified” (No se puede abrir “FirebaseCppApp-<version>.bundle” porque no se puede verificar el desarrollador), debes aprobar ese archivo de paquete específico en el menú de seguridad y privacidad de Mac.

Para ello, haz clic en el ícono de Apple > Preferencias del sistema > Seguridad y privacidad.

En el menú de seguridad (aproximadamente a la mitad de la página) hay una sección en la que se indica “"FirebaseCppApp-<version>.bundle" was blocked from use because it is not from an identified developer” (Se bloqueó el uso de “FirebaseCppApp-<version>.bundle” porque no proviene de un desarrollador identificado).

Haz clic en el botón Allow Anyway.

c35166e224cce720.png

Regresa a Unity y presiona Play de nuevo.

Luego, verás una advertencia similar a la primera:

5ad9ddb0d3a52892.png

Presiona Open para que tu programa pueda continuar. No se te volverá a preguntar sobre este archivo en particular.

Asegúrate de que tu proyecto contenga y use archivos de configuración válidos

  1. Asegúrate de que la configuración de tu compilación sea la que deseas (iOS o Android) en File > Build Settings. Para obtener un análisis más completo, consulta la documentación de configuración de compilación de Unity.
  2. Descarga el archivo de configuración de tu app (google-services.json para Android o GoogleService-Info.plist para iOS) y compila el destino desde Firebase console en Configuración del proyecto > Tus apps: Si ya tienes estos archivos, bórralos de tu proyecto y reemplázalos por la versión más reciente. Asegúrate de que estén escritos exactamente como se muestra arriba sin “(1)” ni otros números adjuntos a los nombres de archivo.
  3. Si la consola contiene un mensaje sobre los archivos de Assets/StreamingAssets/, asegúrate de que no haya mensajes que indiquen que Unity no pudo editar archivos en la consola.
  4. Asegúrate de que se genere Assets/StreamingAssets/google-services-desktop.json y que coincida con el archivo de configuración descargado.
    • Si no se genera automáticamente y StreamingAssets/ no existe, crea el directorio de forma manual en el directorio Assets.
    • Comprueba si Unity generó google-services-desktop.json.

Asegúrate de que todos los productos de Firebase y EDM4U se hayan instalado exclusivamente mediante .unitypackage o Unity Package Manager

  1. Revisa la carpeta Assets/ y Unity Package Manager para asegurarte de que los SDK de Firebase y EDM4U se hayan instalado a través de uno o el otro método de manera exclusiva.
  2. Algunos complementos desarrollados por Google, como Google Play, y los complementos de terceros pueden depender de EDM4U. Esos complementos pueden incluir EDM4U en sus paquetes .unitypackage o Unity Package Manager (UPM). Asegúrate de que haya solo una copia de EDM4U en tu proyecto. Si algún paquete de UPM depende de EDM4U, es mejor conservar solo las versiones de UPM de EDM4U, que puedes encontrar en la página de archivo de las APIs de Google para Unity.

Asegúrate de que todos los productos de Firebase de tu proyecto tengan la misma versión.

  1. Si los SDK de Firebase se instalaron a través de .unitypackage, verifica si todas las bibliotecas de FirebaseCppApp en Assets/Firebase/Plugins/x86_64/ están en la misma versión.
  2. Si los SDK de Firebase se instalaron a través de Unity Package Manager (UPM), abre Windows > Package Manager, busca “Firebase” y asegúrate de que todos los paquetes de Firebase estén en la misma versión.
  3. Si tu proyecto incluye diferentes versiones de los SDK de Firebase, te recomendamos que quites todos los SDK de Firebase antes de volver a instalarlos, esta vez con las mismas versiones. La forma más sencilla es quitar todos los paquetes de Firebase mediante los métodos mencionados en esta sección sobre la migración.

Errores del agente de resolución y de compilación de dispositivos de destino

Si tu juego funciona en el editor (configurado para el destino de compilación apropiado que elijas), verifica que External Dependency Manager for Unity (EDM4U) esté configurado y funcione correctamente.

El repositorio de EDM4U de GitHub contiene una guía paso a paso para esta parte del proceso que debes revisar y seguir antes de continuar.

Problemas y reducción de “Single Dex” (obligatorio si se usa Cloud Firestore)

Cuando compilas una app para Android, es posible que experimentes una falla de compilación relacionada con un solo archivo dex. El mensaje de error es similar al siguiente, si el proyecto está configurado para usar el sistema de compilación de Gradle.

Cannot fit requested classes in a single dex file.

Los archivos .dex se usan para contener un conjunto de definiciones de clase y sus datos complementarios para aplicaciones para Android. Un solo archivo dex se limita a la referencia a 65,536 métodos. Las compilaciones fallarán si la cantidad total de métodos de todas las bibliotecas de Android de tu proyecto supera este límite.

Los siguientes dos pasos se pueden aplicar de forma secuencial (solo habilita multidex si la reducción no resuelve el problema).

Habilita la reducción

Unity agregó la reducción en su versión 2017.2 para quitar el código que no se usa, lo que puede reducir la cantidad total de métodos de referencia en un archivo dex único. * Esta opción se encuentra en Player Settings > Android > Publishing Settings > Minify. * Las opciones pueden variar en distintas versiones de Unity, así que consulta la documentación oficial de Unity.

Habilita multidex

Si, después de habilitar la reducción, la cantidad de métodos a los que se hace referencia aún excede el límite, otra opción es habilitar multidex. Hay muchas formas de lograrlo en Unity:

  • Si está habilitada la Custom Gradle Template en Player Settings, modifica mainTemplate.gradle.
  • Si usas Android Studio para compilar el proyecto exportado, modifica el archivo build.gradle a nivel del módulo.

Puedes encontrar más información en la guía del usuario de multidex.

Comprende y corrige los errores del entorno de ejecución de los dispositivos de destino

Si tu juego funciona en el editor y se puede instalar y compilar en tu dispositivo de destino, pero encuentras errores durante el entorno de ejecución, inspecciona y también investiga los registros generados en el dispositivo.

En esta sección, se explica cómo investigar los registros en busca de posibles errores y uno de esos errores que solo ocurre durante el tiempo de ejecución en el dispositivo o en el simulador.

Android

Simulador

  • Inspecciona los registros que se muestran en la consola del emulador o consulta la ventana Logcat.

Dispositivo

Familiarízate con adb y adb logcat, y cómo utilizarlos.

  • Si bien puedes usar las diversas herramientas del entorno de la línea de comandos para filtrar el resultado, considera como alternativa las opciones de logcat.
  • Una forma sencilla de iniciar una sesión de ADB desde cero es la siguiente:

    adb logcat -c && adb logcat <OPTIONS>
    

    En el ejemplo anterior, OPTIONS son las marcas que pasas a la línea de comandos para filtrar el resultado.

Usa Logcat mediante Android Studio

Cuando usas Logcat a través de Android Studio, hay herramientas de búsqueda adicionales disponibles que facilitan la generación de búsquedas productivas.

iOS

Inspecciona registros

Si usas un dispositivo físico, conéctalo a la computadora. Inspecciona lldb en Xcode.

Problemas con swift

Si te encuentras con registros de errores que mencionan swift, consulta la sección External Dependency Manager for Unity relacionada con ellos.

Pasos adicionales

Si tu juego aún tiene problemas de compilación o ejecución relacionados con Firebase, investiga la página de problemas del SDK de Firebase para Unity y considera informar un problema nuevo. Además, consulta la página de asistencia de Firebase para obtener opciones adicionales.