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

Firebase Crashlytics SDK'ya yükseltin

Artık, diğer Firebase ürünleriyle daha tutarlı ve kullanımı daha sezgisel olan geliştirilmiş API'ler sunan yeni resmi Firebase Crashlytics SDK'sını kullanarak uygulamanızda Crashlytics'i kurabilirsiniz.

Bu kılavuz, eski Fabric SDK'dan yeni SDK'ya nasıl yükseltileceğini açıklar. Yeni API'lerle birlikte gelen değişiklikleri, değişikliklerin nedenini ve gerekirse kodunuzu nasıl güncelleyeceğinizi açıklar.

Sen başlamadan önce

1. Adım: Bir Firebase yapılandırma dosyası ekle

  1. Sizin açın Proje Ayarları . Uygulamalarınız kartında, bir yapılandırma dosyasına ihtiyacınız olan uygulamanın paket kimliğini seçin.

  2. Senin Firebase iOS yapılandırma dosyasını (elde etmek İndir GoogleService-Info.plist'ni tıklayın GoogleService-Info.plist ).

  3. Yapılandırma dosyanızı Xcode projenizin kök dizinine taşıyın. İstenirse, yapılandırma dosyasını tüm hedeflere eklemek için seçin.

Eğer projenizde birden paket kimliği yoksa, Her bir uygulama kendi olabilir böylece Firebase konsolunda tescilli uygulaması ile her paket kimliği ilişkilendirmek gerekir GoogleService-Info.plist dosyasını.

2. Adım: Firebase Crashlytics SDK ekle

  1. Cocoapods şunları değiştirmeyi Fabric ve Crashlytics bir ile bölmeleri Firebase/Crashlytics tüm hedeflerinde pod.

    # Add the pod for Firebase Crashlytics
    pod 'Firebase/Crashlytics'
    # Recommended: Add the Firebase pod for Google Analytics pod 'Firebase/Analytics'
  2. Fabric Answers ve üçüncü taraf kitlerindeki bağımlılıklar gibi üçüncü taraf bağımlılıklarını doğrudan Fabric'ten kaldırın veya kaldırın.

  3. Sonra açın kurun ve bölmeleri güncellemek .xcworkspace Xcode projeyi görmek için dosyayı:

    pod install
    open YOUR_PROJECT.xcworkspace

3. Adım: kodunuzu güncelleme

  1. Xcode'da uygulamanızı yeniden oluşturun, ardından .xcworkspace dosyanızı yeniden açın.

  2. Aşağıdaki SDK değişikliklerini inceleyin ve kodunuz için uygun güncellemeleri yapın:


Crashlytics artık kimlikleri Firebase kurulum kimliklerine göre değiştiriyor.

Crashlytics, uygulamanızın örneklerini belirlemek ve kullanıcılarınızın verilerini cihazlarıyla ilişkilendirmek için Crashlytics Kurulum UUID'sini kullanır. Daha önce Crashlytics, cihazının reklam kimliği değiştiğinde kullanıcınızın Kurulum UUID'sini değiştiriyordu. Artık Crashlytics, Kurulum UUID'sini kullanıcının Firebase kurulum kimliğine (FID) göre döndürür. Daha fazla bilgi için, ziyaret Firebase kurulum kimlikleri yönetme .

değişmek için sebep

FID'lerin kullanılması, diğer Firebase SDK'ları ile tutarlıdır.


Çalıştırma ve yükleme simgeleri komut dosyaları artık FirebaseCrashlytics'te.

Artık erişebilir run ve upload-symbols yeni komut dosyaları FirebaseCrashlytics kütüphanede. Hala çağırabilir Not upload-symbols manuel için inşa sürecinde herhangi bir yerden karşıdan DSyms yükleyin.

Buna ek olarak, Kumaşın API_KEY ve BUILD_SECRET artık yeni SDK dahildir. Bunun yerine, Crashlytics şimdi uygulamanızın kullandığı GoogleService-info.plist sizin Firebase projesi ile uygulamanızı ilişkilendirmek ve tarihsel kaza verilerini korumak için.

Kumaş SDK'sı

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

Firebase Crashlytics SDK'sı

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

değişmek için sebep

Crashlytics artık Yapı SDK'sını bir bağımlılık olarak kullanmadığından, CLI araçlarımızı yeni bir kitaplığa taşıyoruz.


Crashlytics kitaplığının adı artık FirebaseCrashlytics.

Uygulamanızda içe aktarma yollarınızı güncelleyin:

Kumaş SDK'sı

Süratli

import Crashlytics

Amaç-C

@import Crashlytics

Firebase Crashlytics SDK'sı

Süratli

import FirebaseCrashlytics

Amaç-C

@import FirebaseCrashlytics

değişmek için sebep

Adını güncellenmesi Crashlytics kütüphanesinde diğer Firebase kütüphaneleri (örn ile tutarlı kılan FirebaseFirestore ve FirebaseAuth ).


FirebaseCrashlytics artık Fabric SDK ile çalışmamaktadır.

Şimdi, FirebaseCrashlytics sadece Firebase Crashlytics SDK ile başlatılabilir. Sen bir örneğini başlatmak için FirebaseCrashlytics arayarak FirebaseApp.configure Swift veya [FIRApp configure] Objective-C.

Senin içinde application:didFinishLaunchingWithOptions , çağrı yerine Fabric.with ve startWithAPIKey bir çağrıda bulunan FirebaseApp :

Kumaş SDK'sı

Süratli

Fabric.with([Crashlytics.self])

Amaç-C

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

Firebase Crashlytics SDK'sı

Süratli

FirebaseApp.configure()

Amaç-C

[FIRApp configure];

değişmek için sebep

Crashlytics'i başlatmak için yeni yöntemlerin kullanılması, diğer Firebase hizmetlerinin nasıl başlatıldığıyla daha tutarlıdır.


Crash ve throwException yöntemleri kaldırıldı.

Yeni SDK artık içerir crash veya throwException yöntemleri. Bunun yerine, kullanımı fatalError Swift veya amaç-C boş bir dizi bir kilitlenme zorlamak için kullanılır.

Firebase Crashlytics SDK'sı

Süratli

// Force a test crash
fatalError()

Amaç-C

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

değişmek için sebep

Çeşitli nedenlerle farklı türde çökmeler meydana gelebilir ve bu yöntemler, ortaya çıkan kilitlenmelerin çalışma zamanı sırasında mı yoksa uygulamanızın yerel SDK'sında mı meydana geldiğini açıkça belirtmedi.


SharedInstance yöntemi artık crashlytics olarak adlandırılmıştır.

Yeni SDK artık içerir sharedInstance yöntemi. Crashlytics başlatmak için, kullanım crashlytics yerine (referans belgelerini okuyun Swift veya Objective-C daha fazla bilgi için). Uygulamanızın temsilcisinde, başlatma komut dosyanızı güncelleyin:

Kumaş SDK'sı

Süratli

Crashlytics.sharedInstance()

Amaç-C

[Crashlytics sharedInstance];

Firebase Crashlytics SDK'sı

Süratli

Crashlytics.crashlytics()

Amaç-C

[FIRCrashlytics crashlytics];

değişmek için sebep

Diğer Firebase SDK'ları ile tutarlı olması için örnek alıcı yöntemini yeniden adlandırdık.


setUserIdentifier artık setUserID'dir. setUserName ve setUserEmail kaldırılır.

Daha önce, kullanarak bir çökme olayıyla ilişkili ad veya e-posta ayarlayabilirsiniz setUserName ve setUserEmail , ancak bu yöntemler artık belirlenecektir. Yeni tercih edilen yöntem kullanıcılar için ayarlanan kimlikleri kullanmaktır setUserID .

Kumaş SDK'sı

Süratli

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

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

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

Amaç-C

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

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

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

Firebase Crashlytics SDK'sı

Süratli

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

Amaç-C

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

değişmek için sebep

Biz yöntem adı benimsenmiştir setUserID diğer Firebase API'leri ve kaldırılan ile tutarlı olması için setUserName ve setUserEmail Crashlytics aracılığıyla PII günlüğü vazgeçirmek için.


CLSLogv ve CLSNSLogv, günlüğe kaydetme işlevleriyle değiştirilir.

Yeni SDK artık içerir CLSLogv veya CLSNSLogv fonksiyonları. To özel günlük mesajları eklemek , yeni kayıt yöntemleri kullanmak Crashlytics kütüphanesine. Yeni yöntemler artık yazdırmak olduğunu Not stdout veya NSLog (bu davranışı tutmak istiyorsak sarıcı yazma öneririz).

Kumaş SDK'sı

Süratli

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

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

Amaç-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'sı

Süratli

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

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

Amaç-C

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

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

Eğer kullanılırsa CLS_LOG , günlük tablolara dosya isimleri ve satır numaralarını almaya devam etmek bir başlık dosyasına aşağıdakileri ekleyin:

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

değişmek için sebep

Yeni yöntemler, kodu test etmeyi kolaylaştıran örnekler gerektirir.


setCustomValue, setObjectValue, setIntValue, setFloatValue ve setBoolValue'nin yerini alıyor.

Özel ayarlayıcı yöntemleri artık yeni SDK'ya dahil değildir. Daha önce, yöntemleri kullanabilirsiniz set anahtar / değer çiftleri Çökme raporuyla birlikte göndermek. Şimdi, kullanabilirsiniz setCustomValue:forKey tüm veri türleri için ayarlanan anahtar / değer çiftlerine.

Kumaş SDK'sı

Süratli

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

Amaç-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'sı

Süratli

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

Amaç-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"];

değişmek için sebep

Yeni yöntem adı Crashlytics'e özeldir ve Crashlytics'in anahtar/değer uyumlu olmadığını açıkça ortaya koymaktadır.


recordCustomExceptionName:reason:frameArray: İstisna Modeli API'si ile değiştirilir.

Uygulamanız yerel olmayan bir ortamda çalışıyorsa (ör. JavaScript veya Unity), kilitlenme meta verilerini uygulamanızın yerel istisna biçiminde bildirmek için İstisna Modeli API'sini kullanabilirsiniz.

Kumaş SDK'sı

Süratli

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

Amaç-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'sı

Süratli

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)

Amaç-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],
];

değişmek için sebep

Bu özellik uzun süredir talep ediliyor ve Crashlytics'i Unity, Flutter veya React Native gibi diğer platformlara genişletmenize olanak tanıyor.



CrashlyticsDelegate, kilitlenme raporlarını işlemek için ayrı yöntemlerle değiştirilir.

Artık kilitlenme raporlarını işlemek için yeni bir dizi yöntem kullanabilirsiniz:

  • didFinishLaunchingWithOptions şimdi yeni işleyici ile değiştirilir checkForUnsentReportsWithCompletion .

  • crashlyticsDidDetectReportForLastExecution şimdi değiştirilir didCrashDuringPreviousExecution . didCrashDuringPreviousExecution rahatlıkla uygulamanızın son çalışması sırasında meydana gelen çökmeleri algılamasını sağlar.

  • crashlyticsCanUseBackgroundSessions artık kalıcı true olarak ayarlanır.

  • Biz teftiş artık destek CLSReport temsilci nesnesi.

Varsayılan olarak, Crashlytics başlangıçta otomatik olarak kilitlenme raporlarını yükler ve daha önce diyebiliriz didFinishLaunchingWithOptions kullanıcıların izin opt-in kazasında raporlama. Şimdi, çağrı sırasında setCrashlyticsCollectionEnabled=false otomatik kilitlenme raporlamayı devre dışı bırakmak, Crashlytics çağırır checkForUnsentReportsWithCompletion kullanıcıların zaman uygulama kilitleniyor çökme raporları göndermek isteyip istemediğinizi seçmenizi sağlar. Daha sonra arayabilir sendUnsentReports kullanıcı seçerse veya deleteUnsentReports kullanıcı devre dışı bırakmazsa eğer.

Ayrıca çağırabilir Not sendUnsentReports ve deleteUnsentReports dışında checkForUnsentReportsWithCompletion . Örneğin, kullanıcılarınız size kilitlenme raporları göndermeniz için kapsamlı onay veya ret vermişse, kilitlenme raporlamasını kalıcı olarak ayarlamak veya devre dışı bırakmak isteyebilirsiniz. Uygulamanız yaşam döngüsünün başlarında çökerse, hiçbir zaman kilitlenme raporları almayabileceğinizi unutmayın.

Kumaş SDK'sı

Süratli

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

Amaç-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'sı

Süratli

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

Amaç-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.
}

değişmek için sebep

Yeni yöntemler grubu, uygulamanızın kilitlenme raporlama davranışı üzerinde size daha fazla kontrol sağlar. Ayrıca, Crashlytics'i başlatmadan önce CrashlyticsDelegate'i kurmanız gerekmez.


firebase_crashlytics_collection_enabled, FirebaseCrashlyticsCollectionEnabled ile değiştirilir.

Ayarladığınızda FirebaseCrashlyticsCollectionEnabled sizin false Info.plist , Crashlytics başlangıçta otomatik kilitlenme raporları göndererek durdurur. Uygulamanızın ilk çalıştırma sonra ayrıca tarafından devre dışı kazasında raporlama ayarı yapabilirsiniz setCrashlyticsCollectionEnabled için false sizin de Crashlytics.h ama not olduğunu setCrashlyticsCollectionEnabled bu bayrak geçersiz kılmaları.

Değiştirerek otomatik toplama kapatma firebase_crashlytics_collection_enabled sizin anahtarı Info.plist :

  • Anahtar: FirebaseCrashlyticsCollectionEnabled

  • Değeri: false

Uygulamanızın ilk çalıştırma sonra, ayrıca üzere aşağıdaki ekleyerek otomatik toplama kapatabilirsiniz Crashlytics.h :

Firebase Crashlytics SDK'sı

Süratli

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

Amaç-C

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

değişmek için sebep

Artık, otomatik kilitlenme raporlamasını devre dışı bıraktığınızda Crashlytics'in gönderilmemiş kilitlenme raporlarını nasıl ele alacağı üzerinde daha fazla kontrole sahipsiniz. Eğer ayarladıktan sonra FirebaseCrashlyticsCollectionEnabled YANLıŞ olarak, Arayabileceğin checkForUnsentReportsWithCompletion göründüğünü anlamak için kullanıcının seçtiği bağlı olarak uygulamanızda her yerde ve ya gönderme veya silme gönderilmemiş raporlarından.


Artık Crashlytics her zaman arka plan oturumlarını kullanır.

Eğer ayarlayarak app bunu destekleyecek istemiyordu eğer Daha önce, arkaplan oturumları kapatmak olabilir crashlyticsCanUseBackgroundSessions YANLıŞ olarak. Şimdi, crashlyticsCanUseBackgroundSessions her zaman doğru olarak ayarlanır.

değişmek için sebep

Arka planda oturumları desteklemeyen 7.0'ın altındaki iOS sürümlerini veya OS X 10.9'un altındaki macOS sürümlerini artık desteklemiyoruz.


Crashlytics, yalnızca Google Analytics tarafından toplanan verileri kullanabilir.

Firebase Crashlytics SDK'ya yükselttikten sonra Yapı Yanıtları ile artık veri toplayamazsınız. Kilitlenmeyen kullanıcılar ve içerik haritaları için metrikler almak için bunun yerine Google Analytics'i kullanmaya geçin. Geçmiş Yanıtlar verilerinizin Firebase'e taşınamayacağını unutmayın.

Ziyaret Başlangıç Google Analytics kullanarak uygulamanıza Google Analytics ekleyerek öğrenmek için.

değişmek için sebep

Artık kilitlenme verileriniz hakkında daha fazla bilgi edinmenize yardımcı olmak için Google Analytics'i sunuyoruz. Analytics ile Firebase konsolunda uygulamanız için istatistik toplamaya devam edebilirsiniz.

Sonraki adımlar