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:
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
).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.
O script de execução para o upload automático de dSYMs não existe.
Se este script de execução não existir, será possível adicioná-lo manualmente:
Localize o ID do app do Firebase para seu app Apple. Ele pode ser encontrado em dois lugares:
No console do Firebase, acesse
. 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. > Configurações do projeto 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 comoGOOGLE_APP_ID
.
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.
Expanda a nova seção Run Script.
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
Precisa encontrar o ID do app Firebase?
Veja duas maneiras de encontrar o ID do app Firebase:
No arquivo
GoogleService-Info.plist
, o ID do app é o valorGOOGLE_APP_ID
; ouNo 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.
- FIREBASE_APP_ID: o ID do app Apple do Firebase (não o ID do pacote da Apple).
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)
Entenda por que os locais desses arquivos são necessários
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.
Existe um script de execução para o upload automático dos arquivos dSYMs
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:
Localize o ID do app do Firebase para seu app Apple. Ele pode ser encontrado em dois lugares:
No console do Firebase, acesse
. 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. > Configurações do projeto 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 comoGOOGLE_APP_ID
.
Ao executar o script
upload-symbols
, use
em vez de-ai FIREBASE_APPLE_APP_ID .-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
Precisa encontrar o ID do app Firebase?
Veja duas maneiras de encontrar o ID do app Firebase:
No arquivo
google-services.json
, o ID do app é o valormobilesdk_app_id
; ouNo 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.