Receber relatórios de erros legíveis no painel do Crashlytics


Por padrão, o Firebase Crashlytics instrumenta automaticamente seu projeto do Flutter para fazer upload dos arquivos de símbolos necessários, que garantem a desofuscação e a legibilidade por humanos dos relatórios de erros.

Há casos que podem resultar na configuração incompleta do projeto. Este guia descreve o que a automação faz e fornece as primeiras etapas para depurar a configuração do projeto.

Plataformas da Apple

Verifique sua configuração para fazer upload de arquivos dSYM

Ao adicionar o plug-in do Flutter do Crashlytics e executar o comando flutterfire configure, é realizada a tentativa de adicionar um script de execução ao espaço de trabalho do Xcode do projeto, que encontra e faz upload dos arquivos de símbolo dSYM necessários para o Crashlytics. Sem esses arquivos, um alerta dSYM ausente será exibido no painel do Crashlytics e as exceções serão retidas pelo back-end até que os arquivos ausentes sejam enviados por upload.

Caso tenha esse problema, primeiro verifique se o script de execução está instalado:

  1. Localize e abra o arquivo do espaço de trabalho do Xcode no diretório do iOS do seu projeto (FLUTTER_PROJECT_NAME/ios/Runner.xcworkspace).

  2. Identifique se um script de execução chamado [firebase_crashlytics] Crashlytics Upload Symbols foi adicionado às fases de compilação do destino do executor.

    Consulte a seção aplicável abaixo para saber se o script de execução não existe ou existe o script de execução.

Se este script de execução não existir, será possível adicioná-lo manualmente:

  1. Localize o ID do app do Firebase para seu app Apple. Ele pode ser encontrado em dois lugares:

    • No console do Firebase, acesse > Configurações do projeto. Role a tela para baixo até o card Seus apps e clique no app Apple do Firebase para acessar as informações dele, incluindo o ID do app.

    • Localize o arquivo firebase_options.dart no diretório de nível superior do projeto do Flutter. O ID do app do Firebase para seu aplicativo da Apple é identificado como GOOGLE_APP_ID.

  2. Clique em > New Run Script Phase.

    Verifique se essa nova fase Run Script é a última fase do build do seu projeto. Caso contrário, o Crashlytics não vai processar dSYMs corretamente.

  3. Expanda a nova seção Run Script.

  4. No campo do script (localizado no rótulo Shell), adicione os scripts de execução a seguir.

    Esses scripts processam seus arquivos dSYM e fazem upload dos arquivos para o 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: o ID do app Apple do Firebase (não o ID do pacote da Apple).
      Exemplo de ID do app Apple do Firebase: 1:1234567890:ios:321abc456def7890

    Veja duas maneiras de encontrar o ID do app Firebase:

    • No arquivo GoogleService-Info.plist, o ID do app é o valor GOOGLE_APP_ID; ou

    • No console do Firebase, acesse as Configurações do projeto. Role a tela para baixo até o card Seus apps e clique no app Firebase que você quer para encontrar o ID respectivo.

  5. Na seção Input Files, adicione os caminhos para os locais dos arquivos a seguir:

    ${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)

    O Xcode procura nos locais especificados por esses arquivos de entrada para garantir que os arquivos de build estejam disponíveis para o script de execução. Além disso, se User Script Sandboxing estiver ativado, o Xcode só vai permitir que o script de execução acesse arquivos especificados em Input Files.

    • Fornecer a localização dos arquivos dSYM do seu projeto permite que o Crashlytics processe dSYMs.
    • Fornecer a localização do arquivo GoogleService-Info.plist de build do seu app permite que o Crashlytics associe os dSYMs ao seu app do Firebase.
    • Fornecer a localização do executável do seu app permite que o script de execução impeça uploads duplicados do mesmo dSYM. Os binários do app não são enviados.

Se o script de execução existir, consulte o Guia específico da Apple para solução de problemas do dSYM. Você vai precisar seguir as etapas abaixo caso queira fazer o upload dos arquivos dSYM pelo processo descrito:

  1. Localize o ID do app do Firebase para seu app Apple. Ele pode ser encontrado em dois lugares:

    • No console do Firebase, acesse > Configurações do projeto. Role a tela para baixo até o card Seus apps e clique no app Apple do Firebase para acessar as informações dele, incluindo o ID do app.

    • Localize o arquivo firebase_options.dart no diretório de nível superior do projeto do Flutter. O ID do app do Firebase para seu aplicativo da Apple é identificado como GOOGLE_APP_ID.

  2. Ao executar o script upload-symbols, use -ai FIREBASE_APPLE_APP_ID em vez de -gsp /path/to/GoogleService-Info.plist.

Verifique a configuração de versão do Flutter e do Crashlytics (se estiver usando a flag --split-debug-info)

Caso seu projeto do Flutter use a flag --split-debug-info (e, opcionalmente, também a flag --obfuscate), outras etapas serão necessárias para mostrar stack traces legíveis no seu app.

Verifique se o projeto está usando a configuração de versão recomendada (Flutter 3.12.0+ e plug-in do Flutter do Crashlytics 3.3.4+) para que ele possa gerar e fazer upload automaticamente de símbolos do Flutter (arquivos dSYM) para o Crashlytics.

Android

Verificar a configuração da dependência

O comando flutterfire configure tenta adicionar as dependências necessárias aos arquivos de build do Gradle do seu projeto. Sem essas dependências e com a ofuscação ativada, os relatórios de erros no console do Firebase poderão ser ofuscados.

Verifique se as linhas a seguir estão presentes nos níveis do projeto build.gradle e do app build.gradle:

  • No arquivo de compilação do nível do projeto (android/build.gradle), verifique a seguinte linha:

    dependencies {
    // ... other dependencies
    
    classpath 'com.google.gms:google-services:4.3.5'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
  • No arquivo de compilação do nível do app (android/app/build.gradle), verifique a seguinte linha:

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

Verifique se você está usando a CLI para fazer upload de símbolos do Flutter (se estiver usando a flag --split-debug-info)

Caso seu projeto do Flutter use a flag --split-debug-info (e, opcionalmente, também a flag --obfuscate), outras etapas serão necessárias para mostrar stack traces legíveis no seu app.

Use a CLI do Firebase (v.11.9.0+) para fazer o upload de símbolos de depuração do Flutter. Você precisa fazer upload dos símbolos de depuração antes de relatar uma falha de um build de código ofuscado.

No diretório raiz do projeto do Flutter, execute o seguinte comando:

firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
  • FIREBASE_APP_ID: seu ID do app Android do Firebase (não o nome do pacote)
    Exemplo de ID do app Android do Firebase: 1:567383003300:android:17104a2ced0c9b9b

    Veja duas maneiras de encontrar o ID do app Firebase:

    • No arquivo google-services.json, o ID do app é o valor mobilesdk_app_id; ou

    • No console do Firebase, acesse as Configurações do projeto. Role a tela para baixo até o card Seus apps e clique no app Firebase que você quer para encontrar o ID respectivo.

  • PATH/TO/symbols: o mesmo diretório que você passa para a flag --split-debug-info ao criar o aplicativo.

Se os problemas persistirem, consulte o Guia específico do Android para solução de problemas com relatórios ofuscados.