Obtén informes de fallas legibles en el panel de Crashlytics


De forma predeterminada, Firebase Crashlytics instrumenta automáticamente tu proyecto de Flutter para subir los archivos de símbolos necesarios para garantizar que los informes de fallas estén desofuscados y sean legibles por humanos.

Sin embargo, hay casos en los que el proyecto no se configura por completo. En esta guía, se describe lo que hace la automatización y se indican los primeros pasos para depurar la configuración de tu proyecto.

Plataformas de Apple

Verifica la configuración para subir archivos dSYM

Cuando agregas el complemento de Flutter de Crashlytics y ejecutas el comando flutterfire configure se intentará agregar una secuencia de comandos de ejecución al lugar de trabajo de Xcode del proyecto que encuentre y suba los archivos de símbolos dSYM necesarios a Crashlytics. Sin estos archivos, verás la alerta "dSYM faltante" en el panel de Crashlytics y el backend retendrá las excepciones hasta que se suban los archivos faltantes.

Si tienes este problema, primero asegúrate de instalar la secuencia de comandos de ejecución:

  1. Ubica y abre el archivo del lugar de trabajo de Xcode en el directorio de iOS de tu proyecto (FLUTTER_PROJECT_NAME/ios/Runner.xcworkspace).

  2. Identifica si se agregó una secuencia de comandos de ejecución llamada [firebase_crashlytics] Crashlytics Upload Symbols a las fases de compilación del destino del ejecutor.

    Consulta la sección a continuación para saber si la secuencia de comandos de ejecución no existe o sí existe.

Si esta secuencia de comandos de ejecución no existe, puedes agregarla de forma manual:

  1. Busca el ID de la app de Firebase de tu app para Apple. Hay dos lugares diferentes en los que puedes encontrar este ID:

    • En Firebase console, ve a > Configuración del proyecto. Desplázate hacia abajo hasta la tarjeta Tus apps y, luego, haz clic en tu app de Firebase para Apple para ver la información de la app, incluido su ID.

    • En el directorio de nivel superior de tu proyecto de Flutter, busca el archivo firebase_options.dart. El ID de la app de Firebase de tu app para Apple se etiqueta como GOOGLE_APP_ID.

  2. Haz clic en  > New Run Script Phase.

    Asegúrate de que esta nueva fase Run Script sea la última fase de compilación del proyecto. De lo contrario, Crashlytics no podrá procesar correctamente los archivos dSYM.

  3. Expande la nueva sección Run Script.

  4. En el campo de la secuencia de comandos (ubicado en la etiqueta Shell), agrega las siguientes secuencias de comandos de ejecución.

    Estas secuencias de comandos procesan tus archivos dSYM y los suben a Crashlytics.

    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase --validate -ai FIREBASE_APP_ID -- $DWARF_DSYM_FOLDER_PATH/App.framework.dSYM
    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase -ai FIREBASE_APP_ID -- $DWARF_DSYM_FOLDER_PATH/App.framework.dSYM 
    • FIREBASE_APP_ID: El ID de la app para Apple de Firebase (no el ID de paquete de Apple)
      Ejemplo de ID de app de Firebase para Apple: 1:1234567890:ios:321abc456def7890

    Puedes hacerlo de las siguientes dos maneras:

    • En el archivo GoogleService-Info.plist, el ID de la app es el valor GOOGLE_APP_ID.

    • En Firebase console, ve a Configuración del proyecto. Desplázate hacia abajo hasta la tarjeta Tus apps y, luego, haz clic en la app de Firebase que quieres para buscar su ID.

  5. En la sección Input Files, agrega las rutas de acceso de las ubicaciones de los siguientes archivos:

    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist
    $(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
    $(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)

    Xcode busca en las ubicaciones especificadas estos archivos de entrada para garantizar que los archivos de compilación estén disponibles para la secuencia de comandos de ejecución. Además, si la zona de pruebas de secuencias de comandos de usuario está habilitada, Xcode solo permite que la secuencia de comandos de ejecución acceda a los archivos especificados en los archivos de entrada.

    • Proporcionar la ubicación de los archivos dSYM del proyecto permite que Crashlytics procese los archivos dSYM.
    • Proporcionar la ubicación del archivo GoogleService-Info.plist compilado de tu app permite que Crashlytics asocie los archivos dSYM con tu app de Firebase.
    • Proporcionar la ubicación del ejecutable de tu app permite que la secuencia de comandos de ejecución evite subir archivos duplicados del mismo dSYM. Ten en cuenta que los objetos binarios de la app no se subieron.

Si la secuencia de comandos de ejecución existe, consulta la guía específica de Apple para solucionar problemas de dSYM. Si eliges subir tus archivos dSYM a través del proceso descrito, deberás completar los siguientes pasos adicionales:

  1. Busca el ID de la app de Firebase de tu app para Apple. Hay dos lugares diferentes en los que puedes encontrar este ID:

    • En Firebase console, ve a > Configuración del proyecto. Desplázate hacia abajo hasta la tarjeta Tus apps y, luego, haz clic en tu app de Firebase para Apple para ver la información de la app, incluido su ID.

    • En el directorio de nivel superior de tu proyecto de Flutter, busca el archivo firebase_options.dart. El ID de la app de Firebase de tu app para Apple se etiqueta como GOOGLE_APP_ID.

  2. Cuando ejecutes la secuencia de comandos upload-symbols, usa -ai FIREBASE_APPLE_APP_ID en lugar de -gsp /path/to/GoogleService-Info.plist.

Verifica la configuración de tu versión para Flutter y Crashlytics (si usas la marca --split-debug-info)

Si tu proyecto de Flutter usa la marca --split-debug-info (y, de forma opcional, la marca --obfuscate), se requieren pasos adicionales para mostrar seguimientos de pila legibles de tu app.

Asegúrate de que en tu proyecto se use la configuración de versión recomendada (Flutter 3.12.0 y versiones posteriores y el complemento de Flutter de Crashlytics 3.3.4 y versiones posteriores) para que tu proyecto genere y suba automáticamente símbolos de Flutter (archivos dSYM) a Crashlytics.

Android

Verifica la configuración de tu dependencia

El comando flutterfire configure intenta agregar dependencias necesarias a los archivos de compilación de Gradle de tu proyecto. Sin estas dependencias, los informes de fallas en Firebase console podrían ofuscarse si está activada la ofuscación.

Asegúrate de que las siguientes líneas estén presentes en el build.gradle de nivel de proyecto y en el build.gradle de nivel de la app:

  • En el archivo de compilación de nivel de proyecto (android/build.gradle), verifica la siguiente línea:

    dependencies {
    // ... other dependencies
    
    classpath 'com.google.gms:google-services:4.3.5'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
  • En el archivo de compilación de nivel de la app (android/app/build.gradle), verifica la siguiente línea:

    // ... other imports
    
    android {
    // ... your android config
    }
    
    dependencies {
    // ... your dependencies
    }
    
    // This section must appear at the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'com.google.firebase.crashlytics'

Verifica que uses la CLI para subir símbolos de Flutter (si se usa la marca --split-debug-info).

Si tu proyecto de Flutter usa la marca --split-debug-info (y, de forma opcional, la marca --obfuscate), se requieren pasos adicionales para mostrar seguimientos de pila legibles de tu app.

Usa Firebase CLI (v11.9.0 y versiones posteriores) para subir símbolos de depuración de Flutter. Debes subir los símbolos de depuración antes de informar una falla de una compilación de código ofuscada.

En el directorio raíz de tu proyecto de Flutter, ejecuta el siguiente comando:

firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
  • FIREBASE_APP_ID: El ID de la app para Android de Firebase (no el nombre del paquete)
    ID de ejemplo de la app para Android de Firebase: 1:567383003300:android:17104a2ced0c9b9b

    Puedes hacerlo de las siguientes dos maneras:

    • En el archivo google-services.json, el ID de la app es el valor mobilesdk_app_id.

    • En Firebase console, ve a Configuración del proyecto. Desplázate hacia abajo hasta la tarjeta Tus apps y, luego, haz clic en la app de Firebase que quieres para buscar su ID.

  • PATH/TO/symbols: Es el mismo directorio que pasas a la marca --split-debug-info cuando compilas la aplicación.

Si los problemas persisten, consulta la guía específica de Android para solucionar problemas de informes ofuscados.