Começar a usar o Firebase Crashlytics

Neste guia de início rápido, descrevemos como configurar o Firebase Crashlytics no seu app com o SDK do Firebase Crashlytics para que você receba relatórios de erros abrangentes no Console do Firebase.

A configuração do Crashlytics exige tarefas no Console do Firebase e no ambiente de desenvolvimento integrado, como adicionar um arquivo de configuração do Firebase e o SDK do Crashlytics. Para concluir a configuração, você precisará forçar uma falha de teste para enviar seu primeiro relatório de erros ao Firebase.

Antes de começar

  1. Adicione o Firebase ao seu projeto da Apple caso ainda não tenha feito isso. Se você não tiver um app da Apple, faça o download de um aplicativo de exemplo.

  2. Recomendado: para gerar automaticamente registros de navegação estrutural e entender as ações do usuário que levam a uma falha, um evento não fatal ou um ANR, você precisa para ativar o Google Analytics no seu projeto do Firebase.

    • Caso seu projeto do Firebase não tenha o Google Analytics ativado, faça a ativação na guia Integrações das suas > Configurações do projeto no Console do Firebase.

    • Se estiver criando um novo projeto do Firebase, ative o Google Analytics durante o fluxo de trabalho de criação do projeto.

    Os registros de navegação estrutural estão disponíveis para todas as plataformas da Apple compatíveis com o Crashlytics, exceto o watchOS.

Etapa 1: adicionar o SDK do Crashlytics ao seu app

Use o Swift Package Manager para instalar e gerenciar as dependências do Firebase.

  1. No Xcode, com seu projeto do app aberto, navegue até File > Add Packages.
  2. Quando solicitado, adicione o repositório do SDK do Firebase para as plataformas Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Escolha a biblioteca do Crashlytics.
  5. Para usar os registros de navegação estrutural, adicione também o SDK do Firebase para Google Analytics ao seu app. Verifique se o Google Analytics está ativado no seu projeto do Firebase.
  6. Adicione a flag -ObjC à seção Outras flags do vinculador nas configurações de build do destino.
  7. (Apenas macOS) Em Info.plist, adicione a chave NSApplicationCrashOnExceptions e a defina como YES.
  8. Quando terminar, o Xcode vai começar a resolver e fazer o download das dependências em segundo plano automaticamente.

Em seguida, configure o módulo do Firebase:

  1. Importe o módulo do Firebase no struct App ou em UIApplicationDelegate:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. Configure uma instância compartilhada FirebaseApp, normalmente no método application(_:didFinishLaunchingWithOptions:) do delegado do seu app:

    Swift

    // Use the Firebase library to configure APIs.
    FirebaseApp.configure()
    

    Objective-C

    // Use the Firebase library to configure APIs.
    [FIRApp configure];
    

Etapa 2: configurar o Xcode para fazer upload de arquivos dSYM automaticamente

Para gerar relatórios de erros legíveis, o Crashlytics precisa dos arquivos do símbolo de depuração do seu projeto (dSYM, na sigla em inglês). Veja nas etapas a seguir como configurar o Xcode para produzir automaticamente os dSYMs, processá-los e fazer upload dos arquivos sempre que você compilar seu app.

  1. Abra o espaço de trabalho do Xcode e selecione o arquivo do projeto no navegador à esquerda.

  2. Na lista TARGETS, selecione o destino de criação principal.

  3. Clique na guia Build Settings e conclua as etapas a seguir para que o Xcode gere dSYMs para seus builds.

    1. Clique em All e pesquise por debug information format.

    2. Defina Debug Information Format como DWARF with dSYM File para todos os tipos de build.

  4. Clique na guia Build Phases e conclua as etapas a seguir para que o Xcode possa processar seus dSYMs e fazer upload dos arquivos.

    1. 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 poderá processar dSYMs corretamente.

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

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

      Este script processa os arquivos dSYM do seu projeto e faz upload deles para o Crashlytics.

      "${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
    4. 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)

Para informações mais detalhadas sobre os arquivos dSYM e o Crashlytics (incluindo como fazer upload manual de arquivos dSYM), acesse Receber relatórios de erros desofuscados.

Etapa 3: forçar uma falha de teste para concluir a configuração

Para concluir a configuração do Crashlytics e ver os dados iniciais no painel do Console do Firebase, é necessário forçar uma falha de teste.

  1. Adicione um código ao app que possa ser usado para forçar uma falha no teste.

    É possível usar o código a seguir para adicionar um botão ao seu app que, quando pressionado, causa uma falha. O botão é chamado de "Testar falha".

    SwiftUI

    Button("Crash") {
      fatalError("Crash was triggered")
    }
    

    UIKit

    Swift

    import UIKit
    
    class ViewController: UIViewController {
      override func viewDidLoad() {
          super.viewDidLoad()
    
          // Do any additional setup after loading the view, typically from a nib.
    
          let button = UIButton(type: .roundedRect)
          button.frame = CGRect(x: 20, y: 50, width: 100, height: 30)
          button.setTitle("Test Crash", for: [])
          button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside)
          view.addSubview(button)
      }
    
      @IBAction func crashButtonTapped(_ sender: AnyObject) {
          let numbers = [0]
          let _ = numbers[1]
      }
    }
    

    Objective-C

    #import "ViewController.h"
    
    @implementation ViewController
    ‐ (void)viewDidLoad {
        [super viewDidLoad];
    
        // Do any additional setup after loading the view, typically from a nib.
    
        UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(20, 50, 100, 30);
        [button setTitle:@"Test Crash" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(crashButtonTapped:)
            forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];
    }
    
    ‐ (IBAction)crashButtonTapped:(id)sender {
        @[][1];
    }
    
    @end
    
  2. Crie e execute o app no Xcode com o depurador do Xcode desconectado.

    1. Clique em Build and then run the current scheme para criar seu app em um dispositivo de teste ou simulador.

    2. Aguarde até que o app esteja em execução e clique em Stop running the scheme or action para fechar a instância inicial do app. Essa instância inicial incluía o depurador que interfere no Crashlytics.

  3. Force a falha de teste para enviar o primeiro relatório de erros do app:

    1. Abra o app na tela inicial do dispositivo de teste ou do simulador.

    2. No app, pressione o botão "Testar falha" que você adicionou usando o código acima.

    3. Depois que o app falhar, execute-o novamente no Xcode para que ele possa enviar o relatório de falhas ao Firebase.

  4. Acesse o painel do Crashlytics no Console do Firebase para ver a falha do teste.

    Se você atualizou o console e ainda não consegue ver a falha de teste após cinco minutos, ative a geração de registros de depuração para ver se o app está enviando relatórios de falha.


Pronto. O Crashlytics está monitorando seu app em busca de falhas. Acesse o painel do Crashlytics para ver e analisar todos os relatórios e estatísticas.

Próximas etapas