Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

שדרג ל- SDK של Firebase Crashlytics

כעת תוכל להגדיר את Crashlytics באפליקציה שלך באמצעות ה- SDK הרשמי החדש של Firebase Crashlytics, המציע ממשקי API משופרים העולים בקנה אחד עם מוצרי Firebase אחרים ואינטואיטיביים יותר לשימוש.

מדריך זה מתאר כיצד לשדרג ל- SDK החדש מ- SDK Fabric מדור קודם. הוא מתאר את השינויים המצורפים לממשקי ה- API החדשים, את הסיבה לשינויים וכיצד לעדכן את הקוד שלך, במידת הצורך.

לפני שאתה מתחיל

שלב 1: הוספת קובץ תצורת Firebase

  1. פתח את גדרות פרויקט . בשנת כרטיס Apps, בחר את מזהה החבילה של היישום שבהם אתה צריך קובץ config.

  2. לחץ להורדה GoogleService-info.plist להשיג קובץ config Firebase iOS שלך ( GoogleService-Info.plist ).

    • ניתן להוריד את הקובץ config Firebase iOS שוב בכל עת.

    • ודאו את שם קובץ config שלא הוסף עם דמויות נוספות, כמו (2) .

  3. העבר את קובץ התצורה שלך לשורש פרוייקט ה- Xcode שלך. אם תתבקש, בחר להוסיף את קובץ התצורה לכל היעדים.

אם יש לך מזהי צרור מרובים בפרויקט שלך, עליך לשייך כל זיהוי חבילה עם אפליקציית רשום במסוף Firebase כך שכל יישום יכולים להיות משלה GoogleService-Info.plist קובץ.

שלב 2: מוסיפים את SDK Firebase Crashlytics

  1. בשנת Cocoapods, להחליף את Fabric ו Crashlytics תרמילים עם Firebase/Crashlytics תרמיל בכל היעדים.

    # Add the pod for Firebase Crashlytics
    pod 'Firebase/Crashlytics'
    # Recommended: Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
  2. הסר או הסר ישירות תלות של צד שלישי מ- Fabric, כגון תלות מתשובות Fabric וערכות צד שלישי.

  3. ההתקן ועדכן את התרמילים, ולאחר מכן פתח את .xcworkspace קובץ כדי לראות את הפרויקט ב Xcode:

    pod install
    open YOUR_PROJECT.xcworkspace

שלב 3: עדכן את הקוד שלך

  1. ב- Xcode, בנה מחדש את האפליקציה שלך ולאחר מכן פתח שוב את קובץ .xcworkspace שלך.

  2. בדוק את השינויים הבאים ב- SDK ובצע את העדכונים המתאימים לקוד שלך:


Crashlytics מסובב כעת מזהים על סמך מזהי התקנה של Firebase.

Crashlytics משתמש ב- UUID התקנת Crashlytics כדי לזהות מופעים של האפליקציה שלך ולשייך את נתוני המשתמשים שלך למכשירים שלהם. בעבר, Crashlytics סובבו את UUID ההתקנה של המשתמש שלך כאשר מזהה הפרסום של המכשיר שלהם השתנה. כעת, Crashlytics מסובב את UUID ההתקנה על סמך מזהה ההתקנה של Firebase (FID) של המשתמש. לקבלת מידע נוסף, בקרו ניהול מזהי התקנת Firebase .

סיבה לשינוי

השימוש ב- FID תואם SDKs אחרים של Firebase.


סקריפטים ההפעלה והסמלי ההעלאה נמצאים כעת ב- FirebaseCrashlytics.

כעת ניתן לגשת run ו upload-symbols סקריפטים החדשה FirebaseCrashlytics הספרייה. שים לב, אתה עדיין יכול להתקשר upload-symbols מכל מקום לבנות התהליך שלך להעלות dSYMs שלך באופן ידני.

בנוסף, של בד API_KEY ו BUILD_SECRET לא כלולים כבר ב- SDK החדש. במקום זאת, Crashlytics חברה משתמש באפליקצית GoogleService-info.plist לשייך את האפליקציה שלכם באמצעות פרויקט Firebase שלך ולשמור נתוני ההתרסקות הסטורי שלך.

בד 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

סיבה לשינוי

Crashlytics כבר לא משתמש ב- SDK Fabric כתלות, ולכן אנו מעבירים את כלי ה- CLI שלנו לספרייה חדשה.


ספריית Crashlytics נקראת כיום FirebaseCrashlytics.

באפליקציה שלך, עדכן את נתיבי הייבוא ​​שלך:

בד SDK

מָהִיר

import Crashlytics

Objective-C

@import Crashlytics

Firebase Crashlytics SDK

מָהִיר

import FirebaseCrashlytics

Objective-C

@import FirebaseCrashlytics

סיבה לשינוי

עדכון השם של Crashlytics הספרייה עושה את זה עקבי עם ספריות Firebase אחרים (למשל, FirebaseFirestore ו FirebaseAuth ).


FirebaseCrashlytics כבר לא עובד עם ה- SDK Fabric.

עכשיו, FirebaseCrashlytics ניתן לאתחל רק עם SDK Firebase Crashlytics. אתה יכול להתחיל את מופע של FirebaseCrashlytics ידי התקשרות FirebaseApp.configure ב סוויפט או [FIRApp configure] Objective-C.

בתוך שלך application:didFinishLaunchingWithOptions , להחליף שיחות Fabric.with ו startWithAPIKey בקריאה FirebaseApp :

בד SDK

מָהִיר

Fabric.with([Crashlytics.self])

Objective-C

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

Firebase Crashlytics SDK

מָהִיר

FirebaseApp.configure()

Objective-C

[FIRApp configure];

סיבה לשינוי

השימוש בשיטות החדשות לאתחול Crashlytics עולה בקנה אחד עם האתחול של שירותי Firebase אחרים.


שיטות ההתרסקות וה- throwException מוסרות.

ה- SDK החדש לא יכלול עוד crash או throwException שיטות. במקום זאת, השתמשו fatalError ב סוויפט או מערך ריק Objective-C לכפות בהתרסקות.

Firebase Crashlytics SDK

מָהִיר

// Force a test crash
fatalError()

Objective-C

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

סיבה לשינוי

סוגים שונים של קריסות יכולות להתרחש מסיבות שונות, ושיטות אלה לא ציינו בבירור האם התקלות התרחשו במהלך זמן הריצה או ב- SDK המקורי של האפליקציה שלך.


שיטת sharedInstance נקראת כעת crashlytics.

ה- SDK החדש לא יכלול עוד sharedInstance השיטה. כדי לאתחל Crashlytics, השימוש crashlytics במקום (לקרוא את התיעוד התייחסות סוויפט או Objective-C למידע נוסף). בנציג האפליקציה שלך, עדכן את סקריפט האתחול שלך:

בד SDK

מָהִיר

Crashlytics.sharedInstance()

אובייקטיבי-ג

[Crashlytics sharedInstance];

Firebase Crashlytics SDK

מָהִיר

Crashlytics.crashlytics()

Objective-C

[FIRCrashlytics crashlytics];

סיבה לשינוי

שמנו את שמו של שיטת getter המופע כך שהיא תואמת SDKs אחרים של Firebase.


setUserIdentifier הוא כעת setUserID. setUserName ו- setUserEmail מוסרים.

בעבר, אתה יכול להגדיר שם או אימייל המשויכת התרסקות באמצעות setUserName ו setUserEmail , אך שיטות אלה כבר לא יהיה מוגדר. השיטה המועדפת החדשה מזהי סט למשתמשים שלך היא להשתמש setUserID .

בד SDK

מָהִיר

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

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

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

Objective-C

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

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

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

Firebase Crashlytics SDK

מָהִיר

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

Objective-C

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

סיבה לשינוי

אנחנו אימצנו את שם השיטה setUserID להיות עקבי עם APIs Firebase אחרים והוציאו setUserName ו setUserEmail כדי להרתיע כניסה PII דרך Crashlytics.


CLSLogv ו- CLSNSLogv מוחלפים בפונקציות רישום.

ה- SDK החדש לא יכלול עוד CLSLogv או CLSNSLogv פונקציות. כדי להוסיף הודעות יומן מותאמות אישית , להשתמש בשיטות רישום החדשות Crashlytics הספרייה. הערה כי השיטות החדשות כבר לא להדפיס stdout או NSLog (מומלץ לרשום עטיפה אם אתה רוצה לשמור על התנהגות זו).

בד SDK

מָהִיר

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

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

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

מָהִיר

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

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

Objective-C

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

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

אם השתמשת CLS_LOG , להוסיף את הדברים הבאים לקובץ כותרת כדי להמשיך לקבל שמות הקבצים ומספרים קו בדוחות יומן:

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

סיבה לשינוי

השיטות החדשות דורשות מופעים, מה שמקל על בדיקת הקוד.


setCustomValue מחליף את setObjectValue, setIntValue, setFloatValue ו- setBoolValue.

שיטות ההתקנה המותאמות אישית אינן כלולות עוד ב- SDK החדש. בעבר, אתה יכול להשתמש בשיטות כדי זוגות מפתח / ערך סט לשלוח יחד עם דו"ח ההתרסקות שלך. עכשיו, אתה יכול להשתמש setCustomValue:forKey כדי זוגות מפתח / ערך סט לכל סוגי הנתונים.

בד SDK

מָהִיר

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

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

מָהִיר

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

אובייקטיבי-ג

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

סיבה לשינוי

שם השיטה החדש ייחודי לקראשיליטים ומבהיר כי קראשליטיקס אינו תואם ערך מפתח.


recordCustomExceptionName: סיבה: frameArray: מוחלף בממשק ה- API של מודל החריגה.

אם האפליקציה שלך פועלת בסביבה שאינה מקורית (למשל, JavaScript או Unity), תוכל להשתמש בממשק ה- API של מודל החריגה כדי לדווח על מטא נתונים של קריסה בפורמט החריג המקורי של האפליקציה שלך.

בד SDK

מָהִיר

אפשר 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])

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

מָהִיר

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)

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

סיבה לשינוי

תכונה זו מבוקשת זמן רב ומאפשרת לך להרחיב את Crashlytics לפלטפורמות אחרות כמו Unity, Flutter או React Native.



ה- CrashlyticsDelegate מוחלף בשיטות נפרדות לטיפול בדוחות קריסה.

כעת תוכל להשתמש בקבוצת שיטות חדשה לטיפול בדוחות קריסה:

  • didFinishLaunchingWithOptions מוחלף כעת על ידי המטפל החדש checkForUnsentReportsWithCompletion .

  • crashlyticsDidDetectReportForLastExecution מוחלף כעת על ידי didCrashDuringPreviousExecution . didCrashDuringPreviousExecution מאפשר לך לזהות קריסות בנוחות המתרחשות במהלך הריצה האחרונה של האפליקציה שלך.

  • crashlyticsCanUseBackgroundSessions מוגדר כעת לצמיתות נכון.

  • אנחנו לא תומכים בו יותר בדיקת CLSReport אובייקט הנציג.

כברירת מחדל, Crashlytics מעלה באופן אוטומטי ודוחות קריסה בעת ההפעלה, ואתה יכול לקרוא בעבר didFinishLaunchingWithOptions כדי לאפשר למשתמשים שלך opt-in דיווח לקרוס. עכשיו, כשאתה מתקשר setCrashlyticsCollectionEnabled=false לכבות דיווח התרסקות אוטומטי, Crashlytics מכנה checkForUnsentReportsWithCompletion , אשר מאפשר למשתמשים שלך לבחור אם לשלוח דיווחי קריסה כאשר האפליקציה שלך קורסת. לאחר מכן, תוכל להתקשר sendUnsentReports אם הכבושים המשתמש או deleteUnsentReports אם המשתמש בוחר שלא.

שים לב, אתה גם יכול להתקשר sendUnsentReports ו deleteUnsentReports מחוץ checkForUnsentReportsWithCompletion . לדוגמה, ייתכן שתרצה להגדיר או להשבית דיווח על קריסה לצמיתות אם המשתמשים שלך נתנו לך אישור גורף או אי אישור לשלוח דוחות קריסה. זכור כי ייתכן שלעולם לא תקבל דוחות קריסה אם האפליקציה שלך תקרוס בשלב מוקדם של מחזור החיים שלה.

בד SDK

מָהִיר

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

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

מָהִיר

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

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

סיבה לשינוי

מערך השיטות החדש נותן לך שליטה רבה יותר על התנהגות דיווח הקריסה של האפליקציה שלך. כמו כן, אינך צריך עוד להגדיר את CrashlyticsDelegate לפני אתחול Crashlytics.


firebase_crashlytics_collection_enabled מוחלף ב- FirebaseCrashlyticsCollectionEnabled.

כאשר אתה מגדיר FirebaseCrashlyticsCollectionEnabled ל- False שלך Info.plist , Crashlytics מפסיק שליחת דוחות קריסה באופן אוטומטי בעת ההפעלה. לאחר ההרצה הראשונה של האפליקציה שלך, אתה יכול גם להשבית דיווח על קריסה ידי הגדרת setCrashlyticsCollectionEnabled כדי false ב שלך Crashlytics.h , אך מציין כי setCrashlyticsCollectionEnabled עוקפת את הדגל הזה.

בטל איסוף אוטומטי על ידי החלפת firebase_crashlytics_collection_enabled המפתח שלך Info.plist :

  • מפתח: FirebaseCrashlyticsCollectionEnabled

  • ערך: false

לאחר הסיבוב הראשון של האפליקציה שלך, אתה גם יכול לבטל את איסוף אוטומטי על ידי הוספת הכיתוב הבא שלך Crashlytics.h :

Firebase Crashlytics SDK

מָהִיר

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

Objective-C

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

סיבה לשינוי

כעת יש לך שליטה רבה יותר על האופן שבו Crashlytics מטפלת בדוחות קריסה שלא נשלחו כאשר אתה משבית את דיווח התרסקות אוטומטי. לאחר שתגדיר FirebaseCrashlyticsCollectionEnabled כדי שווא, אתה יכול להתקשר checkForUnsentReportsWithCompletion מכל מקום באפליקציה שלך, או לשלוח או דוחות שלא נשלחו מחיקה, תלוי בוחר המשתמש מה שלך.


כעת, Crashlytics תמיד משתמש בהפעלות רקע.

בעבר, אתה יכול לכבות הפעלות רקע אם אתה לא רוצה לתמוך בו באפליקציה שלך על ידי הגדרת crashlyticsCanUseBackgroundSessions כדי שווא. עכשיו, crashlyticsCanUseBackgroundSessions הוא תמיד מוגדר נכון.

סיבה לשינוי

אנחנו כבר לא תומכים בגרסאות iOS מתחת ל- 7.0 או בגרסאות macOS מתחת ל- OS X 10.9, שאינן תומכות בהפעלות רקע.


Crashlytics יכולים להשתמש בנתונים שנאספו רק על ידי Google Analytics.

לא תוכל עוד לאסוף נתונים עם Fabric Answers לאחר השדרוג ל- SDK של Firebase Crashlytics. כדי לקבל מדדים למשתמשים ולפירורי נטולי קריסה, עבור במקום זאת לשימוש ב- Google Analytics. שים לב שנתוני התשובות ההיסטוריות שלך לא יכולות לעבור ל- Firebase.

בקר להתחיל להשתמש ב- Google Analytics כדי ללמוד כיצד להוסיף את Google Analytics באפליקציה.

סיבה לשינוי

כעת אנו מציעים ל- Google Analytics לעזור לך לקבל תובנה נוספת לגבי נתוני ההתרסקות שלך. בעזרת Analytics תוכל להמשיך לאסוף נתונים סטטיסטיים לאפליקציה שלך במסוף Firebase.

הצעדים הבאים