Catch up on everthing we announced at this year's Firebase Summit. Learn more

Mettre à niveau vers le SDK Firebase Crashlytics

Vous pouvez désormais configurer Crashlytics dans votre application à l'aide du nouveau SDK officiel Firebase Crashlytics, qui propose des API améliorées, plus cohérentes avec les autres produits Firebase et plus intuitives à utiliser.

Ce guide explique comment effectuer une mise à niveau vers le nouveau SDK à partir de l'ancien SDK Fabric. Il décrit les modifications apportées avec les nouvelles API, la raison des modifications et comment mettre à jour votre code, si nécessaire.

Avant que tu commences

Étape 1: Ajouter un fichier de configuration Firebase

  1. Ouvrez votre Paramètres du projet . Dans la Votre carte applications, sélectionnez le groupe ID de l'application pour laquelle vous avez besoin d' un fichier de configuration.

  2. Cliquez sur Télécharger GoogleService-Info.plist pour obtenir votre fichier de plates - formes d' Apple Firebase ( GoogleService-Info.plist ).

  3. Déplacez votre fichier de configuration à la racine de votre projet Xcode. Si vous y êtes invité, sélectionnez pour ajouter le fichier de configuration à toutes les cibles.

Si vous avez plusieurs ID de paquet dans votre projet, vous devez associer chaque ID bundle avec une application enregistrée dans la console Firebase afin que chaque application peut avoir son propre GoogleService-Info.plist fichier.

Étape 2: Ajouter le Firebase Crashlytics SDK

  1. En Cocoapods, remplacer les Fabric et Crashlytics gousses avec un Firebase/Crashlytics pod dans toutes les cibles.

    # Add the pod for Firebase Crashlytics
    pod 'Firebase/Crashlytics'
    # Recommended: Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
  2. Désinstallez ou supprimez directement les dépendances tierces de Fabric, telles que les dépendances de Fabric Answers et les kits tiers.

  3. Installer et mettre à jour les gousses, puis ouvrez votre .xcworkspace fichier pour voir le projet dans Xcode:

    pod install
    open YOUR_PROJECT.xcworkspace

Etape 3: Mettre à jour votre code

  1. Dans Xcode, reconstruisez votre application, puis rouvrez votre fichier .xcworkspace.

  2. Examinez les modifications suivantes du SDK et apportez les mises à jour appropriées à votre code :


Crashlytics fait désormais pivoter les identifiants en fonction des identifiants d'installation de Firebase.

Crashlytics utilise l'UUID d'installation de Crashlytics pour identifier les instances de votre application et associer les données de vos utilisateurs à leurs appareils. Auparavant, Crashlytics faisait pivoter l'UUID d'installation de votre utilisateur lorsque l'ID publicitaire de son appareil changeait. Désormais, Crashlytics fait pivoter l'UUID d'installation en fonction de l'ID d'installation Firebase (FID) de l'utilisateur. Pour plus d' informations, visitez le site Gérer les ID d'installation Firebase .

Raison du changement

L'utilisation des FID est cohérente avec les autres SDK Firebase.


Les scripts run et upload-symbols sont maintenant dans FirebaseCrashlytics.

Vous pouvez maintenant accéder aux run et upload-symbols scripts de la nouvelle FirebaseCrashlytics bibliothèque. Notez que vous pouvez toujours appeler upload-symbols où que vous soyez dans votre processus de construction de télécharger manuellement vos dSYMs.

De plus, du tissu API_KEY et BUILD_SECRET ne sont plus inclus dans le nouveau SDK. Au lieu de cela, Crashlytics utilise maintenant votre application GoogleService-info.plist associer votre application avec votre projet Firebase et conserver vos données sur les accidents historiques.

Kit de développement logiciel (SDK) Fabric

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

SDK Firebase Crashlytics

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

Raison du changement

Crashlytics n'utilise plus le SDK Fabric en tant que dépendance, nous déplaçons donc nos outils CLI vers une nouvelle bibliothèque.


La bibliothèque Crashlytics s'appelle désormais FirebaseCrashlytics.

Dans votre application, mettez à jour vos chemins d'importation :

Kit de développement logiciel (SDK) Fabric

Rapide

import Crashlytics

Objectif c

@import Crashlytics

SDK Firebase Crashlytics

Rapide

import FirebaseCrashlytics

Objectif c

@import FirebaseCrashlytics

Raison du changement

Mise à jour du nom de la Crashlytics bibliothèque, il est compatible avec les autres bibliothèques de Firebase (par exemple, FirebaseFirestore et FirebaseAuth ).


FirebaseCrashlytics ne fonctionne plus avec le SDK Fabric.

Maintenant, FirebaseCrashlytics ne peuvent être initialisés avec le SDK Firebase Crashlytics. Vous pouvez démarrer une instance de FirebaseCrashlytics en appelant FirebaseApp.configure à Swift ou [FIRApp configure] en Objective-C.

Au sein de votre application:didFinishLaunchingWithOptions , remplacer les appels à Fabric.with et startWithAPIKey avec un appel à FirebaseApp :

Kit de développement logiciel (SDK) Fabric

Rapide

Fabric.with([Crashlytics.self])

Objectif c

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

SDK Firebase Crashlytics

Rapide

FirebaseApp.configure()

Objectif c

[FIRApp configure];

Raison du changement

L'utilisation des nouvelles méthodes pour initialiser Crashlytics est plus cohérente avec la façon dont les autres services Firebase sont initialisés.


Les méthodes crash et throwException sont supprimées.

Le nouveau SDK ne comprend plus les crash ou throwException méthodes. , Utilisez plutôt fatalError à Swift ou un tableau vide en Objective-C pour forcer un accident.

SDK Firebase Crashlytics

Rapide

// Force a test crash
fatalError()

Objectif c

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

Raison du changement

Différents types de plantages peuvent se produire pour diverses raisons, et ces méthodes ne spécifiaient pas clairement si les plantages résultants se produisaient pendant l'exécution ou dans le SDK natif de votre application.


La méthode sharedInstance s'appelle désormais crashlytics.

Le nouveau SDK ne comprend plus la sharedInstance méthode. Pour initialiser Crashlytics, utilisez crashlytics au lieu (lire la documentation de référence pour Swift ou Objective-C pour plus d' informations). Dans le délégué de votre application, mettez à jour votre script d'initialisation :

Kit de développement logiciel (SDK) Fabric

Rapide

Crashlytics.sharedInstance()

Objectif c

[Crashlytics sharedInstance];

SDK Firebase Crashlytics

Rapide

Crashlytics.crashlytics()

Objectif c

[FIRCrashlytics crashlytics];

Raison du changement

Nous avons renommé la méthode getter d'instance pour qu'elle soit cohérente avec les autres SDK Firebase.


setUserIdentifier est maintenant setUserID. setUserName et setUserEmail sont supprimés.

, Vous pouvez auparavant définir un nom ou e - mail associée à un accident en utilisant setUserName et setUserEmail , mais ces méthodes ne sera plus défini. La nouvelle méthode préférée pour les ID définis pour vos utilisateurs est d'utiliser setUserID .

Kit de développement logiciel (SDK) Fabric

Rapide

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

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

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

Objectif c

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

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

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

SDK Firebase Crashlytics

Rapide

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

Objectif c

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

Raison du changement

Nous avons adopté le nom de la méthode setUserID pour être compatible avec d' autres API Firebase et enlevé setUserName et setUserEmail pour décourager l' exploitation forestière PII par Crashlytics.


CLSLogv et CLSNSLogv sont remplacés par des fonctions de journalisation.

Le nouveau SDK ne comprend plus les CLSLogv ou CLSNSLogv fonctions. Pour ajouter des Crashlytics messages de journaux personnalisés , utilisez les nouvelles méthodes d'exploitation forestière dans la Crashlytics bibliothèque. Notez que les nouvelles méthodes ne plus imprimer sur stdout ou NSLog (nous vous recommandons d' écrire un wrapper si vous voulez garder ce comportement).

Kit de développement logiciel (SDK) Fabric

Rapide

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

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

Objectif 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);

SDK Firebase Crashlytics

Rapide

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

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

Objectif c

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

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

Si vous avez utilisé CLS_LOG , ajoutez ce qui suit dans un fichier d' en- tête pour continuer à obtenir les noms de fichiers et les numéros de ligne dans les états de journal:

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

Raison du changement

Les nouvelles méthodes nécessitent des instances, ce qui facilite le test du code.


setCustomValue remplace setObjectValue, setIntValue, setFloatValue et setBoolValue.

Les méthodes setter personnalisées ne sont plus incluses dans le nouveau SDK. Auparavant, vous pouvez utiliser les méthodes pour fixer des paires clé / valeur d'envoyer en même temps que votre rapport accident. Maintenant, vous pouvez utiliser setCustomValue:forKey à fixer des paires clé / valeur pour tous les types de données.

Kit de développement logiciel (SDK) Fabric

Rapide

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")

Objectif 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"];

SDK Firebase Crashlytics

Rapide

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")

Objectif 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"];

Raison du changement

Le nouveau nom de méthode est unique à Crashlytics et indique clairement que Crashlytics n'est pas conforme à la valeur-clé.


recordCustomExceptionName:reason:frameArray : est remplacé par l'API du modèle d'exception.

Si votre application s'exécute dans un environnement non natif (par exemple, JavaScript ou Unity), vous pouvez utiliser l'API Exception Model pour signaler les métadonnées de plantage dans le format d'exception natif de votre application.

Kit de développement logiciel (SDK) Fabric

Rapide

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])

Objectif 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]];

SDK Firebase Crashlytics

Rapide

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)

Objectif 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],
];

Raison du changement

Cette fonctionnalité est demandée depuis longtemps et vous permet d'étendre Crashlytics sur d'autres plateformes comme Unity, Flutter ou React Native.



Le CrashlyticsDelegate est remplacé par des méthodes distinctes pour la gestion des rapports d'incident.

Vous pouvez désormais utiliser un nouvel ensemble de méthodes pour gérer les rapports d'incident :

  • didFinishLaunchingWithOptions est maintenant remplacé par le nouveau gestionnaire checkForUnsentReportsWithCompletion .

  • crashlyticsDidDetectReportForLastExecution est maintenant remplacé par didCrashDuringPreviousExecution . didCrashDuringPreviousExecution vous permet de détecter facilement les accidents qui se produisent au cours de la dernière exécution de votre application.

  • crashlyticsCanUseBackgroundSessions est maintenant en permanence la valeur true.

  • Nous ne soutien plus l'inspection CLSReport objet dans le délégué.

Par défaut, Crashlytics télécharge automatiquement au démarrage rapports d' erreur, et vous pourriez appeler préalablement didFinishLaunchingWithOptions pour permettre à vos utilisateurs opt-in aux rapports crash. Maintenant, lorsque vous appelez setCrashlyticsCollectionEnabled=false pour désactiver les rapports de collision automatique, les appels Crashlytics checkForUnsentReportsWithCompletion , ce qui permet à vos utilisateurs de choisir ou non d'envoyer des rapports d' erreur lorsque votre application se bloque. Vous pouvez ensuite appeler sendUnsentReports si les opts utilisateur dans ou deleteUnsentReports si l'utilisateur se retire.

Notez que vous pouvez également appeler sendUnsentReports et deleteUnsentReports en dehors de checkForUnsentReportsWithCompletion . Par exemple, vous souhaiterez peut-être configurer ou désactiver de manière permanente les rapports de plantage si vos utilisateurs vous ont donné leur approbation générale ou leur refus d'envoyer des rapports de plantage. Gardez à l'esprit que vous ne recevrez peut-être jamais de rapports de plantage si votre application se bloque au début de son cycle de vie.

Kit de développement logiciel (SDK) Fabric

Rapide

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
  }
}

Objectif 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

SDK Firebase Crashlytics

Rapide

/* 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.
}

Objectif 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.
}

Raison du changement

Le nouvel ensemble de méthodes vous donne plus de contrôle sur le comportement de rapport de plantage de votre application. De plus, vous n'avez plus besoin de configurer CrashlyticsDelegate avant d'initialiser Crashlytics.


firebase_crashlytics_collection_enabled est remplacé par FirebaseCrashlyticsCollectionEnabled.

Lorsque vous définissez FirebaseCrashlyticsCollectionEnabled false dans votre Info.plist , Crashlytics cesse d' envoyer automatiquement au démarrage rapports d' erreur. Après la première course, vous pouvez également désactiver les rapports de plantage de votre application en réglant setCrashlyticsCollectionEnabled à false dans votre Crashlytics.h , mais notez que setCrashlyticsCollectionEnabled remplace ce drapeau.

Désactivez la collecte automatique en remplaçant la firebase_crashlytics_collection_enabled clé dans votre Info.plist :

  • Légende: FirebaseCrashlyticsCollectionEnabled

  • Valeur: false

Après la première manche de votre application, vous pouvez également désactiver la collecte automatique en ajoutant ce qui suit à votre Crashlytics.h :

SDK Firebase Crashlytics

Rapide

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

Objectif c

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

Raison du changement

Vous avez désormais plus de contrôle sur la façon dont Crashlytics gère les rapports d'incident non envoyés lorsque vous désactivez les rapports d'incident automatiques. Après avoir défini FirebaseCrashlyticsCollectionEnabled false, vous pouvez appeler checkForUnsentReportsWithCompletion de partout dans votre application et envoyer ou supprimer des rapports non envoyés, en fonction de vos Choisit utilisateur.


Désormais, Crashlytics utilise toujours des sessions en arrière-plan.

Auparavant, vous pouvez désactiver les sessions de fond si vous ne voulez pas le soutenir dans votre application en définissant crashlyticsCanUseBackgroundSessions false. Maintenant, crashlyticsCanUseBackgroundSessions est toujours à vrai.

Raison du changement

Nous ne prenons plus en charge les versions iOS inférieures à 7.0 ou les versions macOS inférieures à OS X 10.9, qui ne prennent pas en charge les sessions en arrière-plan.


Crashlytics ne peut utiliser que les données collectées par Google Analytics.

Vous ne pouvez plus collecter de données avec Fabric Answers après la mise à niveau vers le SDK Firebase Crashlytics. Pour obtenir des métriques pour les utilisateurs et les fils d'Ariane sans plantage, passez plutôt à l'utilisation de Google Analytics. Notez que vos données Answers historiques ne peuvent pas migrer vers Firebase.

Visitez utiliser Google Analytics pour savoir comment ajouter Google Analytics à votre application.

Raison du changement

Nous proposons désormais Google Analytics pour vous aider à mieux comprendre vos données de crash. Avec Analytics, vous pouvez continuer à collecter des statistiques pour votre application dans la console Firebase.

Prochaines étapes