Primeiros passos com 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 ter recursos como usuários sem falhas, registros de navegação estrutural e alertas de velocidade, ative o Google Analytics no seu projeto do Firebase.

    Todas as plataformas da Apple que recebem suporte do Crashlytics (exceto o watchOS) podem aproveitar esses recursos do Google Analytics. Você precisa do SDK v8.9.0 ou versões posteriores para apps macOS e tvOS.

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

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

Etapa 1: adicionar o SDK do Firebase 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 da Apple:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Escolha a biblioteca do Crashlytics.
  5. Para uma experiência ideal com o Crashlytics, recomendamos ativar o Google Analytics no seu projeto do Firebase e adicionar o SDK do Firebase para Google Analytics ao seu app. É possível selecionar a biblioteca com ou sem o recurso de coleta do IDFA.
  6. Quando terminar, o Xcode 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 UIApplicationDelegate:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. Configure uma instância compartilhada do FirebaseApp, normalmente no inicializador do App ou no método application(_:didFinishLaunchingWithOptions:) do delegado do 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ê criar 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 de 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 Arquivos de entrada, adicione os caminhos para os locais dos arquivos a seguir:

      • O local dos arquivos dSYM do seu projeto:

        ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}

        Fornecer a localização dos arquivos dSYM do seu projeto permite que o Crashlytics processe dSYMs para apps grandes com mais rapidez.

      • O local do arquivo Info.plist criado do seu projeto:

        $(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

        Ao fornecer o local do arquivo Info.plist criado do projeto o Crashlytics associa uma versão do app aos dSYMs.

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.

    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