This guide contains instructions for upgrading to the latest version of the Firebase Crashlytics SDK from the legacy Fabric SDK.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Esegui l'upgrade all'SDK Firebase Crashlytics

Ora puoi configurare Crashlytics nella tua app utilizzando il nuovo Firebase Crashlytics SDK ufficiale, che offre API migliorate che sono più coerenti con altri prodotti Firebase e più intuitive da usare. Questa guida descrive come eseguire l'upgrade al nuovo SDK da Fabric Crashlytics SDK. Descrive le modifiche apportate con le nuove API, il motivo delle modifiche e come aggiornare il codice, se necessario.

Se di recente hai migrato la tua app da Fabric, controlla in che modo l'aggiornamento a Firebase Crashlytics SDK influisce sui dati di analisi degli arresti anomali.

Passaggio 1 : aggiungi un file di configurazione Firebase

  1. Apri le Impostazioni del progetto. Nella scheda Le tue app , seleziona l'ID bundle dell'app per cui hai bisogno di un file di configurazione.
  2. Fai clic su Scarica GoogleService-Info.plist per ottenere il file di configurazione di Firebase iOS ( GoogleService-Info.plist ).

    • Puoi scaricare nuovamente il file di configurazione iOS di Firebase in qualsiasi momento.

    • Assicurati che il nome del file di configurazione non sia aggiunto con caratteri aggiuntivi, come (2) .

  3. Sposta il tuo file di configurazione nella radice del tuo progetto Xcode. Se richiesto, selezionare per aggiungere il file di configurazione a tutte le destinazioni.

Se hai più ID bundle nel tuo progetto, devi associare ogni ID bundle a un'app registrata nella console Firebase in modo che ogni app possa avere il proprio file GoogleService-Info.plist .

Passaggio 2 : aggiungi l'SDK Firebase Crashlytics

  1. In Cocoapods, sostituisci i pod Fabric e Crashlytics con un pod Firebase/Crashlytics in tutti i bersagli. Assicurati di aggiungere la versione 4.0.0 o successiva (è necessaria per visualizzare i rapporti sugli arresti anomali nella console di Firebase).

    # Add the pod for Firebase Crashlytics
    pod 'Firebase/Crashlytics'
    # Recommended: Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
  2. Disinstalla o rimuovi direttamente le dipendenze di terze parti da Fabric, come le dipendenze da Fabric Answers e kit di terze parti.

  3. Installa e aggiorna i pod, quindi apri il file .xcworkspace per vedere il progetto in Xcode:

    pod install
    open your-project.xcworkspace

Passaggio 3 : aggiorna il codice

  1. In Xcode, ricostruisci la tua app, quindi riapri di nuovo il file .xcworkspace.

  2. Esamina le seguenti modifiche all'SDK e apporta gli aggiornamenti appropriati al tuo codice:


Crashlytics ora ruota gli ID in base agli ID di installazione di Firebase.

Crashlytics utilizza l'UUID di installazione di Crashlytics per identificare le istanze della tua app e per associare i dati degli utenti ai loro dispositivi. In precedenza, Crashlytics ruotava l'UUID di installazione dell'utente quando cambiava l'ID pubblicitario del suo dispositivo. Ora, Crashlytics ruota l'UUID di installazione in base all'ID di installazione Firebase (FID) dell'utente. Per ulteriori informazioni, visita Gestire gli ID di installazione di Firebase .

ragione per cambiare

L'utilizzo dei FID è coerente con altri SDK Firebase.


Gli script di esecuzione e di caricamento dei simboli sono ora in FirebaseCrashlytics.

Ora puoi accedere agli script di run e upload-symbols dalla nuova libreria FirebaseCrashlytics . Tieni presente che puoi comunque chiamare upload-symbols da qualsiasi punto del processo di creazione per caricare manualmente i tuoi dSYM.

Inoltre, API_KEY e BUILD_SECRET non sono più inclusi nel nuovo SDK. Invece, Crashlytics ora utilizza GoogleService-info.plist della tua app per associare la tua app al tuo progetto Firebase e conservare i dati storici sugli arresti GoogleService-info.plist .

Fabric SDK

${PODS_ROOT}/Fabric/run API_KEY BUILD_SECRET
/path/to/pods/directory/Fabric/upload-symbols

Firebase Crashlytics SDK

${PODS_ROOT}/FirebaseCrashlytics/run
/path/to/pods/directory/FirebaseCrashlytics/upload-symbols

ragione per cambiare

Crashlytics non utilizza più Fabric SDK come dipendenza, quindi stiamo spostando i nostri strumenti CLI in una nuova libreria.


La libreria Crashlytics è ora chiamata FirebaseCrashlytics.

Nella tua app, aggiorna i percorsi di importazione:

Fabric SDK

Swift

import Crashlytics

Obiettivo-C

@import Crashlytics

Firebase Crashlytics SDK

Swift

import FirebaseCrashlytics

Obiettivo-C

@import FirebaseCrashlytics

ragione per cambiare

L'aggiornamento del nome della libreria Crashlytics lo rende coerente con altre librerie Firebase (ad esempio, FirebaseFirestore e FirebaseAuth ).


FirebaseCrashlytics non funziona più con Fabric SDK.

Ora, FirebaseCrashlytics può essere inizializzato solo con Firebase Crashlytics SDK. Puoi avviare un'istanza di FirebaseCrashlytics chiamando FirebaseApp.configure in Swift o [FIRApp configure] in Objective-C.

All'interno della tua application:didFinishLaunchingWithOptions , sostituisci le chiamate a Fabric.with e startWithAPIKey con una chiamata a FirebaseApp :

Fabric SDK

Swift

Fabric.with([Crashlytics.self])

Obiettivo-C

[Fabric with:@[[Crashlytics class]]];
+ startWithAPIKey:
+ startWithAPIKey:delegate:

Firebase Crashlytics SDK

Swift

FirebaseApp.configure()

Obiettivo-C

[FIRApp configure];

ragione per cambiare

L'utilizzo dei nuovi metodi per inizializzare Crashlytics è più coerente con il modo in cui vengono inizializzati altri servizi Firebase.


I metodi crash e throwException vengono rimossi.

Il nuovo SDK non include più i metodi crash o throwException . Invece, usa fatalError in Swift o un array vuoto in Objective-C per forzare un arresto anomalo.

Firebase Crashlytics SDK

Swift

// Force a test crash
fatalError()

Obiettivo-C

// Force a test crash
@[][1];

ragione per cambiare

Diversi tipi di arresti anomali possono verificarsi per una serie di motivi e questi metodi non specificano chiaramente se gli arresti anomali risultanti si sono verificati durante il runtime o nell'SDK nativo dell'app.


Il metodo sharedInstance è ora denominato crashlytics.

Il nuovo SDK non include più il metodo sharedInstance . Per inizializzare Crashlytics, usa invece crashlytics (leggi la documentazione di riferimento per Swift o Objective-C per maggiori informazioni). Nel delegato della tua app, aggiorna lo script di inizializzazione:

Fabric SDK

Swift

Crashlytics.sharedInstance()

Obiettivo-C

[Crashlytics sharedInstance];

Firebase Crashlytics SDK

Swift

Crashlytics.crashlytics()

Obiettivo-C

[FIRCrashlytics crashlytics];

ragione per cambiare

Abbiamo rinominato il metodo getter dell'istanza in modo che fosse coerente con altri SDK Firebase.


setUserIdentifier è ora setUserID. setUserName e setUserEmail vengono rimossi.

In precedenza, era possibile impostare un nome o un indirizzo email associato a un arresto anomalo utilizzando setUserName e setUserEmail , ma questi metodi non saranno più definiti. Il nuovo metodo preferito per impostare gli ID per gli utenti consiste nell'usare setUserID .

Fabric SDK

Swift

Crashlytics.sharedInstance().setUserIdentifier("user_id")

Crashlytics.sharedInstance().setUserEmail("user_email")

Crashlytics.sharedInstance().setUserName("user_name")

Obiettivo-C

[[Crashlytics sharedInstance] setUserIdentifier:@"user_id"];

[[Crashlytics sharedInstance] setUserEmail:@"user_email"];

[[Crashlytics sharedInstance] setUserName:@"user_name"];

Firebase Crashlytics SDK

Swift

Crashlytics.crashlytics().setUserID("user_id")

Obiettivo-C

[[FIRCrashlytics crashlytics] setUserID:@"user_id"];

ragione per cambiare

Abbiamo adottato il nome del metodo setUserID per essere coerente con altre API Firebase e abbiamo rimosso setUserName e setUserEmail per scoraggiare la registrazione di informazioni personali tramite Crashlytics.


CLSLogv e CLSNSLogv vengono sostituiti dalle funzioni di registrazione.

Il nuovo SDK non include più le funzioni CLSLogv o CLSNSLogv . Per aggiungere messaggi di registro personalizzati , utilizzare i nuovi metodi di registrazione nella libreria di Crashlytics . Si noti che i nuovi metodi non vengono più stampati su stdout o NSLog (si consiglia di scrivere un wrapper se si desidera mantenere questo comportamento).

Fabric SDK

Swift

CLSLogv("%@, %@", getVaList([first_arg, second_arg]))

CLSNSLogv("%@, %@", getVaList([first_arg, second_arg]))

Obiettivo-C

CLSLog(@"%@, %@", first_arg, second_arg);
CLSNSLog(@"%@, %@", first_arg, second_arg);

CLSLogv(@"%@, %@", args_va_list);
CLSNSLogv(@"%@, %@", args_va_list);

CLS_LOG(@"%@, %@", first_arg, second_arg);

Firebase Crashlytics SDK

Swift

Crashlytics.crashlytics().log("\(first_arg), \(second_arg)")

Crashlytics.crashlytics().log(format: "%@, %@", arguments: getVaList([first_arg, second_arg]))

Obiettivo-C

[[FIRCrashlytics crashlytics] log:@"first_arg, second_arg"];

[[FIRCrashlytics crashlytics] logWithFormat:@"%@, %@", first_arg, second_arg];

Se hai utilizzato CLS_LOG , aggiungi quanto segue a un file di intestazione per continuare a ottenere nomi di file e numeri di riga nelle istruzioni di registro:

#define CLS_LOG(__FORMAT__, ...) [[FIRCrashlytics crashlytics] logWithFormat:@"%s line %d $ " __FORMAT__, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__]

ragione per cambiare

I nuovi metodi richiedono istanze, il che semplifica il test del codice.


setCustomValue sta sostituendo setObjectValue, setIntValue, setFloatValue e setBoolValue.

I metodi del setter personalizzato non sono più inclusi nel nuovo SDK. In precedenza, potevi utilizzare i metodi per impostare coppie chiave / valore da inviare insieme al rapporto sugli arresti anomali. Ora puoi usare setCustomValue:forKey per impostare coppie chiave / valore per tutti i tipi di dati.

Fabric SDK

Swift

Crashlytics.sharedInstance().setObjectValue("value", forKey: "object_key")

Crashlytics.sharedInstance().setIntValue(100, forKey: "int_key")

Crashlytics.sharedInstance().setFloatValue(99.9, forKey: "float_key")

Crashlytics.sharedInstance().setBoolValue(true, forKey: "bool_key")

Obiettivo-C

[[Crashlytics sharedInstance] setObjectValue:@"key" forKey:@"object_key"];

[[Crashlytics sharedInstance] setIntValue:100 forKey:@"int_key"];

[[Crashlytics sharedInstance] setFloatValue:99.9 forKey:@"float_key"];

[[Crashlytics sharedInstance] setBoolValue:YES forKey:@"bool_key"];

Firebase Crashlytics SDK

Swift

Crashlytics.crashlytics().setCustomValue("value", forKey: "object_key")

Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key")

Crashlytics.crashlytics().setCustomValue(99.9, forKey: "float_key")

Crashlytics.crashlytics().setCustomValue(true, forKey: "bool_key")

Obiettivo-C

[[FIRCrashlytics crashlytics] setCustomValue:@"value" forKey:@"object_key"];

[[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"];

[[FIRCrashlytics crashlytics] setCustomValue:@(99.9) forKey:@"float_key"];

[[FIRCrashlytics crashlytics] setCustomValue:@YES forKey:@"bool_key"];

ragione per cambiare

Il nome del nuovo metodo è univoco per Crashlytics e chiarisce che Crashlytics non è conforme al valore-chiave.


recordCustomExceptionName: motivo: frameArray: viene sostituito dall'API del modello di eccezione.

Se la tua app viene eseguita in un ambiente non nativo (ad esempio JavaScript o Unity), puoi utilizzare l'API del modello di eccezione per segnalare i metadati di arresto anomalo nel formato di eccezione nativo della tua app.

Fabric SDK

Swift

let topFrame = CLSStackFrame () topFrame.symbol = "doSomethingBad" topFrame.fileName = "bad.cc" topFrame.lineNumber = 23

let middleFrame = CLSStackFrame()
middleFrame.symbol = "doOtherStuff"
middleFrame.fileName = "stuff.cc"
middleFrame.lineNumber = 23;

let bottomFrame = CLSStackFrame()
bottomFrame.symbol = "main"
bottomFrame.fileName = "main.cc"
bottomFrame.lineNumber = 123

Crashlytics.sharedInstance().recordCustomExceptionName("FooException",
                                                       reason: "There was a foo.",
                                                       frameArray: [topFrame, middleFrame, bottomFrame])

Obiettivo-C

CLSStackFrame *topFrame = [[CLSStackFrame alloc] init];
topFrame.symbol = @"doSomethingBad";
topFrame.fileName = @"bad.cc";
topFrame.lineNumber = 23;

CLSStackFrame *middleFrame = [[CLSStackFrame alloc] init];
middleFrame.symbol = @"doOtherStuff";
middleFrame.fileName = @"stuff.cc";
middleFrame.lineNumber = 23;

CLSStackFrame *bottomFrame = [[CLSStackFrame alloc] init];
bottomFrame.symbol = @"main";
bottomFrame.fileName = @"main.cc";
bottomFrame.lineNumber = 123;

[[Crashlytics sharedInstance] recordCustomExceptionName:@"FooException"
                                                 reason:@"There was a foo."
                                             frameArray:@[topFrame, middleFrame, bottomFrame]];

Firebase Crashlytics SDK

Swift

var  ex = ExceptionModel.init(name:"FooException", reason:"There was a foo.")
ex.stackTrace = [
  StackFrame.init(symbol:"makeError" fileName:"handler.js" lineNumber:495),
  StackFrame.init(symbol:"then" fileName:"routes.js" lineNumber:102),
  StackFrame.init(symbol:"main" fileName:"app.js" lineNumber:12),
]

crashlytics.record(exceptionModel:ex)

Obiettivo-C

model.stackTrace = @[
  [FIRStackFrame stackFrameWithSymbol:@"makeError" fileName:@"handler.js" lineNumber:495],
  [FIRStackFrame stackFrameWithSymbol:@"then" fileName:@"routes.js" lineNumber:102],
  [FIRStackFrame stackFrameWithSymbol:@"main" fileName:@"app.js" lineNumber:12],
];

ragione per cambiare

Questa funzionalità è stata richiesta a lungo e ti consente di estendere Crashlytics su altre piattaforme come Unity, Flutter o React Native.



CrashlyticsDelegate è sostituito da metodi separati per la gestione dei rapporti sugli arresti anomali.

È ora possibile utilizzare un nuovo set di metodi per la gestione dei rapporti sugli arresti anomali:

  • didFinishLaunchingWithOptions è ora sostituito dal nuovo gestore checkForUnsentReportsWithCompletion .

  • crashlyticsDidDetectReportForLastExecution è ora sostituito da didCrashDuringPreviousExecution . didCrashDuringPreviousExecution ti consente di rilevare comodamente gli arresti anomali che si verificano durante l'ultima esecuzione della tua app.

  • crashlyticsCanUseBackgroundSessions è ora impostato in modo permanente su true.

  • Non supportiamo più l'ispezione dell'oggetto CLSReport nel delegato.

Per impostazione predefinita, Crashlytics carica automaticamente i rapporti sugli arresti anomali all'avvio e potresti chiamare in precedenza didFinishLaunchingWithOptions per consentire agli utenti di attivare la segnalazione degli arresti didFinishLaunchingWithOptions . Ora, quando chiami setCrashlyticsCollectionEnabled=false per disattivare la segnalazione automatica degli arresti anomali, Crashlytics chiama checkForUnsentReportsWithCompletion , che consente agli utenti di scegliere se inviare o meno rapporti sugli arresti anomali quando la tua app si arresta in modo anomalo. È quindi possibile chiamare sendUnsentReports se l'utente deleteUnsentReports o deleteUnsentReports se l'utente rinuncia.

Tieni presente che puoi anche chiamare sendUnsentReports e deleteUnsentReports all'esterno di checkForUnsentReportsWithCompletion . Ad esempio, potresti voler impostare o disabilitare permanentemente la segnalazione degli arresti anomali se i tuoi utenti ti hanno dato l'approvazione o la disapprovazione totale per inviare rapporti sugli arresti anomali. Tieni presente che potresti non ricevere mai rapporti sugli arresti anomali se la tua app si arresta in modo anomalo nelle prime fasi del suo ciclo di vita.

Fabric SDK

Swift

class YourClassName: CrashlyticsDelegate {

  func application(_ application: UIApplication, didFinishLaunchingWithOptions

    ...
    Crashlytics.sharedInstance().delegate = self
    ...

    return true
  }

  func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    /* ... handle unsent reports */
  }

  func crashlyticsCanUseBackgroundSessions(_ crashlytics: Crashlytics) -> Bool {
    return true
  }
}

Obiettivo-C

@interface YourClassName <CrashlyticsDelegate> ()
@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  ...
  [[Crashlytics sharedInstance] setDelegate:self];
  ...

  return YES;
}

-(void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report completionHandler:(void (^)(BOOL submit))completionHandler {
  // ... handle unsent reports
}

-(BOOL)crashlyticsCanUseBackgroundSessions:(Crashlytics *)crashlytics {
  return YES;
}

@end

Firebase Crashlytics SDK

Swift

/* You must set setCrashlyticsCollectionEnabled to false in order to use
checkForUnsentReportsWithCompletion. */

Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)

Crashlytics.crashlytics().checkForUnsentReports { hasUnsentReport in
  let hasUserConsent = false
  // ...get user consent.

  if hasUserConsent && hasUnsentReport {
    Crashlytics.crashlytics().sendUnsentReports()
  } else {
    Crashlytics.crashlytics().deleteUnsentReports()
  }
}

// Detect when a crash happens during your app's last run.
if Crashlytics.crashlytics().didCrashDuringPreviousExecution() {
  // ...notify the user.
}

Obiettivo-C

/* You must set setCrashlyticsCollectionEnabled to false in order to use
checkForUnsentReportsWithCompletion. */

[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:false];

[[FIRCrashlytics crashlytics] checkForUnsentReportsWithCompletion:^(BOOL hasUnsentReports) {
  BOOL hasConsent = false;
  // ...get consent from user.

  if (hasConsent && hasUnsentReports) {
    [[FIRCrashlytics crashlytics] sendUnsentReports];
  } else {
    [[FIRCrashlytics crashlytics] deleteUnsentReports];
  }
}];

// Detect when a crash happens during your app's last run.
if ([[FIRCrashlytics crashlytics] didCrashDuringPreviousExecution]) {
  // ...notify the user.
}

ragione per cambiare

Il nuovo set di metodi ti offre un maggiore controllo sul comportamento di segnalazione degli arresti anomali della tua app. Inoltre, non è più necessario configurare CrashlyticsDelegate prima di inizializzare Crashlytics.


firebase_crashlytics_collection_enabled è sostituito da FirebaseCrashlyticsCollectionEnabled.

Quando imposti FirebaseCrashlyticsCollectionEnabled su false nel tuo Info.plist , Crashlytics interrompe l'invio automatico di rapporti sugli arresti anomali all'avvio. Dopo la prima esecuzione della tua app, puoi anche disabilitare la segnalazione degli setCrashlyticsCollectionEnabled impostando setCrashlyticsCollectionEnabled su false in Crashlytics.h , ma setCrashlyticsCollectionEnabled presente che setCrashlyticsCollectionEnabled questo flag.

Disattiva la raccolta automatica sostituendo la chiave firebase_crashlytics_collection_enabled nel tuo Info.plist :

  • Chiave: FirebaseCrashlyticsCollectionEnabled

  • Valore: false

Dopo la prima esecuzione della tua app, puoi anche disattivare la raccolta automatica aggiungendo quanto segue al tuo Crashlytics.h :

Firebase Crashlytics SDK

Swift

// setCrashlyticsCollectionEnabled is set to true by default.
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)

Obiettivo-C

// setCrashlyticsCollectionEnabled is set to true by default.
[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:false];

ragione per cambiare

Ora hai un maggiore controllo su come Crashlytics gestisce i rapporti sugli arresti anomali non inviati quando disabiliti la segnalazione automatica degli arresti anomali. Dopo aver impostato FirebaseCrashlyticsCollectionEnabled su false, puoi chiamare checkForUnsentReportsWithCompletion da qualsiasi punto della tua app e inviare o eliminare rapporti non inviati, a seconda di ciò che sceglie l'utente.


Ora, Crashlytics utilizza sempre sessioni in background.

Previously, you could turn off background sessions if you didn't want to support it in your app by setting crashlyticsCanUseBackgroundSessions to false. Now, crashlyticsCanUseBackgroundSessions is always set to true.

Reason for change

We no longer support iOS versions below 7.0 or macOS versions below OS X 10.9, which do not support background sessions.


Crashlytics can only use data collected by Google Analytics.

You can no longer collect data with Fabric Answers after upgrading to the Firebase Crashlytics SDK. To get metrics for crash-free users and breadcrumbs, switch over to using Google Analytics instead. Note that your historical Answers data cannot migrate to Firebase.

Visit Start using Google Analytics to learn how to add Google Analytics to your app. If you previously used Fabric Answers, find out how to convert your Answers events to Analytics events .

Reason for change

We now offer Google Analytics to help you get more insight into your crash data. With Analytics, you can continue gathering stats for your app in the Firebase console.

Prossimi passi