Crashlytics kontrol panelinde bir sorunu tıklayarak ayrıntılı bir etkinlik raporu alabilirsiniz. Bu raporları, özel kampanyaları daha iyi anlamanıza yardımcı olacak şekilde özelleştirebilirsiniz. uygulamanızda neler olduğunu ve kendilerine bildirilen etkinliklerle ilgili koşulları Crashlytics
Uygulamanızdan özel anahtarları özel günlük mesajları ve kullanıcı tanımlayıcıları.
İstisnaları Crashlytics'e bildirin.
Uygulamanız Google Analytics için Firebase SDK'sını kullanıyorsa ekmek kırıntıları günlüklerini otomatik olarak alın. Bu günlükler, Uygulamanızda Crashlytics tarafından toplanan bir etkinlikle sonuçlanan kullanıcı işlemleri.
Otomatik kilitlenme raporlamasını kapatın ve Kullanıcılarınız için kayıt raporlamasını etkinleştirmeniz gerekir. Crashlytics'ün varsayılan olarak uygulamanızın tüm kullanıcılarının kilitlenme raporlarını otomatik olarak topladığını unutmayın.
Özel anahtar ekleme
Özel anahtarlar, uygulamanızın kilitlenmesine yol açan belirli durumu öğrenmenize yardımcı olur. İsteğe bağlı anahtar/değer çiftlerini kilitlenme raporlarınızla ilişkilendirebilir, ardından Firebase konsolunda kilitlenme raporlarını aramak ve filtrelemek için özel anahtarları kullanabilirsiniz.
- Crashlytics kontrol panelinde sorunları arayabilirsiniz eşleşen yeni bir etiket oluşturabilirsiniz.
- Konsolda belirli bir sorunu incelerken her etkinlik için ilişkili özel anahtarlar kullanabilir (Anahtarlar alt sekmesi) ve hatta etkinlikleri özel anahtarlara göre (sayfanın üst kısmındaki Filtre menüsü) tıklayın.
Anahtar/değer çiftlerini ayarlamak için setCustomValue
yöntemini kullanın. Örneğin:
Swift
// Set int_key to 100. Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key") // Set str_key to "hello". Crashlytics.crashlytics().setCustomValue("hello", forKey: "str_key")
Objective-C
Tam sayı, boole veya kayan nokta değerleri ayarlarken değeri @(value)
olarak kutu içine alın.
// Set int_key to 100. [[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"]; // Set str_key to "hello". [[FIRCrashlytics crashlytics] setCustomValue:@"hello" forKey:@"str_key"];
Mevcut bir anahtarın değerini, anahtarı ve ayarı çağırarak da değiştirebilirsiniz farklı bir değere ayarlayabilirsiniz. Örneğin:
Swift
Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key") // Set int_key to 50 from 100. Crashlytics.crashlytics().setCustomValue(50, forKey: "int_key")
Objective-C
[[FIRCrashlytics crashlytics] setCustomValue:@(100) forKey:@"int_key"]; // Set int_key to 50 from 100. [[FIRCrashlytics crashlytics] setCustomValue:@(50) forKey:@"int_key"];
Tek parametre olarak NSDictionary kullanarak setCustomKeysAndValues
yöntemini kullanarak anahtar/değer çiftlerini toplu olarak ekleyin:
Swift
let keysAndValues = [ "string key" : "string value", "string key 2" : "string value 2", "boolean key" : true, "boolean key 2" : false, "float key" : 1.01, "float key 2" : 2.02 ] as [String : Any] Crashlytics.crashlytics().setCustomKeysAndValues(keysAndValues)
Objective-C
NSDictionary *keysAndValues = @{@"string key" : @"string value", @"string key 2" : @"string value 2", @"boolean key" : @(YES), @"boolean key 2" : @(NO), @"float key" : @(1.01), @"float key 2" : @(2.02)}; [[FIRCrashlytics crashlytics] setCustomKeysAndValues: keysAndValues];
Özel günlük mesajları ekleme
Kilitlenmeye yol açan etkinlikler hakkında daha fazla bilgi edinmek için uygulamanıza özel Crashlytics günlükleri ekleyebilirsiniz. Crashlytics, günlükleri kilitlenme verilerinizle ilişkilendirir ve Firebase konsolunun Günlükler sekmesinde Crashlytics sayfasında gösterir.
Swift
Sorunların belirlenmesine yardımcı olması için log()
veya log(format:, arguments:)
kullanın. Mesajlar içeren yararlı bir günlük çıkışı almak istiyorsanız log()
'e ilettiğiniz nesne CustomStringConvertible
mülküne uygun olmalıdır. log()
, kendisi için tanımladığınız açıklama özelliğini döndürür
izin verir. Örneğin:
Crashlytics.crashlytics().log("Higgs-Boson detected! Bailing out…, \(attributesDict)")
Çağrıdan döndürülen .log(format:, arguments:)
biçim değerleri
getVaList()
. Örneğin:
Crashlytics.crashlytics().log(format: "%@, %@", arguments: getVaList(["Higgs-Boson detected! Bailing out…", attributesDict]))
log()
veya log(format:, arguments:)
özelliğinin nasıl kullanılacağıyla ilgili daha ayrıntılı bilgi için
bakın: Crashlytics
referans belgeleri.
Objective-C
Sorunları tespit etmek için log
veya logWithFormat
simgesini kullanın. İletiler içeren yararlı bir günlük çıkışı almak istiyorsanız her iki yönteme de ilettiğiniz nesnenin description
örnek özelliğini geçersiz kılması gerektiğini unutmayın.
Örneğin:
[[FIRCrashlytics crashlytics] log:@"Simple string message"]; [[FIRCrashlytics crashlytics] logWithFormat:@"Higgs-Boson detected! Bailing out... %@", attributesDict]; [[FIRCrashlytics crashlytics] logWithFormat:@"Logging a variable argument list %@" arguments:va_list_arg];
log
ve logWithFormat
'un nasıl kullanılacağı hakkında daha fazla bilgi için Crashlytics referans dokümanlarına bakın.
Kullanıcı tanımlayıcıları ayarlama
Bir sorunu teşhis etmek için, hangi kullanıcılarınızın sorunla karşılaştığını bilmek genellikle yararlıdır en iyi yöntemin ne olduğunu öğreneceğiz. Crashlytics, kullanıcıların kimliğini anonim olarak belirlemenin bir yolunu içerir. kilitlenme raporları gösterilmektedir.
Raporlarınıza kullanıcı kimlikleri eklemek için her kullanıcıya kimlik numarası, jeton veya karma oluşturma işlemi uygulanmış değer biçiminde benzersiz bir tanımlayıcı atayın:
Swift
Crashlytics.crashlytics().setUserID("123456789")
Objective-C
[[FIRCrashlytics crashlytics] setUserID:@"123456789"];
Bir kullanıcı tanımlayıcısını ayarladıktan sonra temizlemeniz gerekirse değeri boş bir dizeye sıfırlayın. Kullanıcı tanımlayıcısı temizlendiğinde mevcut Crashlytics kayıtları kaldırılmaz. Bir kullanıcı kimliğiyle ilişkili kayıtları silmeniz gerekiyorsa Firebase destek ekibiyle iletişime geçin.
Ölümcül olmayan istisnaları bildirme
Crashlytics, uygulamanızın kilitlenmelerini otomatik olarak bildirmenin yanı sıra, önemli olmayan istisnaları kaydedersiniz ve uygulamanız bir dahaki sefere bu istisnaları size gönderir lansman sonrasında gerçekleşebilir.
NSError
nesneyi şurada kaydederek önemli olmayan istisnaları kaydedebilirsiniz:
recordError
yöntemini çağırın. recordError
, [NSThread callStackReturnAddresses]
işlevini çağırarak mesaj dizisinin çağrı yığınını yakalar.
Swift
Crashlytics.crashlytics().record(error: error)
Objective-C
[[FIRCrashlytics crashlytics] recordError:error];
recordError
yöntemini kullanırken NSError
yapısını ve Crashlytics'nin kilitlenmeleri gruplandırmak için verileri nasıl kullandığını anlamak önemlidir. Yanlış
recordError
yönteminin kullanılması, öngörülemez davranışlara neden olabilir ve
Crashlytics neden, uygulamanız için günlüğe kaydedilen hataların raporlanmasını sınırlayabilir.
NSError
nesnesinin üç bağımsız değişkeni vardır:
domain: String
code: Int
userInfo: [AnyHashable : Any]? = nil
Yığın izleme analiziyle gruplanan önemli kilitlenmelerin aksine, günlüğe kaydedilen hatalar
domain
ve code
grubuna göre gruplandırılır. Bu, önemli kilitlenmeler ile günlüğe kaydedilen hatalar arasındaki önemli bir farktır. Örneğin:
Swift
let userInfo = [ NSLocalizedDescriptionKey: NSLocalizedString("The request failed.", comment: ""), NSLocalizedFailureReasonErrorKey: NSLocalizedString("The response returned a 404.", comment: ""), NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString("Does this page exist?", comment: ""), "ProductID": "123456", "View": "MainView" ] let error = NSError.init(domain: NSCocoaErrorDomain, code: -1001, userInfo: userInfo)
Objective-C
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"The request failed.", nil), NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The response returned a 404.", nil), NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Does this page exist?", nil), @"ProductID": @"123456", @"View": @"MainView", }; NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:-1001 userInfo:userInfo];
Yukarıdaki hatayı günlüğe kaydettiğinizde NSSomeErrorDomain
ve -1001
'e göre gruplandırılmış yeni bir sorun oluşturulur. Aynı
alan ve kod değerleri aynı sorun altında gruplandırılır. userInfo
nesnesinde bulunan veriler anahtar/değer çiftlerine dönüştürülür ve tek bir sorundaki anahtarlar/günlükler bölümünde gösterilir.
Günlükler ve özel anahtarlar
Kilitlenme raporlarında olduğu gibi, NSError
'e bağlam eklemek için günlükler ve özel anahtarlar yerleştirebilirsiniz. Ancak kilitlenmelere ve günlüklenen hatalara hangi günlüklerin eklendiği arasında bir fark vardır. Bir kilitlenme gerçekleştiğinde uygulama yeniden başlatıldığında,
Crashlytics tarafından diskten alınan günlük kayıtları,
kilitlenmenin zamanı geldi. NSError
günlüğe kaydedildiğinde uygulama hemen sonlandırılmaz. Crashlytics, yalnızca bir sonraki uygulama başlatıldığında günlüğe kaydedilen hata raporunu gönderir ve diskteki günlükler için ayrılan alan miktarını sınırlaması gerekir. Bu nedenle, bir NSError
kaydedildikten sonra yeterli günlük kaydı yapmak mümkündür. Böylece, Crashlytics raporu cihazdan gönderene kadar tüm ilgili günlükler silinir. NSErrors
günlük kaydını yaparken ve günlükleri kullanırken bu dengeyi aklınızda bulundurun.
ekleyebilirsiniz.
Performansla ilgili konular
NSError
günlük kaydının oldukça pahalı olabileceğini unutmayın. Crashlytics, çağrıyı yaptığınız sırada yığın açma adı verilen bir işlem kullanarak geçerli iş parçacığının çağrı yığınını yakalar. Bu işlem, özellikle DWARF açma işlemini destekleyen mimarilerde (arm64 ve x86) CPU ve G/Ç yoğun olabilir.
Geri alma işlemi tamamlandıktan sonra bilgiler diske eşzamanlı olarak yazılır.
Bu, sonraki satırın çökmesi durumunda veri kaybını önler.
Bu API'yi arka plan iş parçacığında çağırmak güvenli olsa da bu çağrının başka bir kuyruğa gönderilmesinin mevcut yığın izleme bağlamını kaybettiğini unutmayın.
NSExceptions nedir?
Crashlytics, NSException
örneklerini doğrudan günlüğe kaydetme ve kaydetme olanağı sunmaz. Genel olarak Cocoa ve Cocoa Touch API'leri istisnalardan korunaklı değildir. Bu, @catch
'ün son derece dikkatli bir şekilde kullanıldığında bile işleminizde istenmeyen çok ciddi yan etkileri olabileceği anlamına gelir. Hiçbir zaman
kodunuzda @catch
ifadeleri kullanın. Daha fazla bilgi için lütfen
Apple'ın belgeleri
çok önemsiyor.
Yığın izlemeyi özelleştirme
Uygulamanız yerel olmayan bir ortamda (C++ veya Unity gibi) çalışıyorsa kilitlenme meta verilerini uygulamanızın yerel istisna biçiminde bildirmek için Exception Model API'yi kullanabilirsiniz. Bildirilen istisnalar, kritik olmayan olarak işaretlenir.
Swift
var ex = ExceptionModel(name:"FooException", reason:"There was a foo.") ex.stackTrace = [ StackFrame(symbol:"makeError", file:"handler.js", line:495), StackFrame(symbol:"then", file:"routes.js", line:102), StackFrame(symbol:"main", file:"app.js", line:12), ] crashlytics.record(exceptionModel:ex)
Objective-C
FIRExceptionModel *model = [FIRExceptionModel exceptionModelWithName:@"FooException" reason:@"There was a foo."]; model.stackTrace = @[ [FIRStackFrame stackFrameWithSymbol:@"makeError" file:@"handler.js" line:495], [FIRStackFrame stackFrameWithSymbol:@"then" file:@"routes.js" line:102], [FIRStackFrame stackFrameWithSymbol:@"main" file:@"app.js" line:12], ]; [[FIRCrashlytics crashlytics] recordExceptionModel:model];
Özel yığın çerçeveleri yalnızca şu adreslerle de başlatılabilir:
Swift
var ex = ExceptionModel.init(name:"FooException", reason:"There was a foo.") ex.stackTrace = [ StackFrame(address:0xfa12123), StackFrame(address:12412412), StackFrame(address:194129124), ] crashlytics.record(exceptionModel:ex)
Objective-C
FIRExceptionModel *model = [FIRExceptionModel exceptionModelWithName:@"FooException" reason:@"There was a foo."]; model.stackTrace = @[ [FIRStackFrame stackFrameWithAddress:0xfa12123], [FIRStackFrame stackFrameWithAddress:12412412], [FIRStackFrame stackFrameWithAddress:194129124], ]; [[FIRCrashlytics crashlytics] recordExceptionModel:model];
İçerik haritası günlüklerini alma
İçerik haritası günlükleri, kullanıcının kilitlenme, önemli olmayan veya ANR etkinliğine neden olan sorunları içerir. Bu günlükler, bir sorunu yeniden oluşturmaya ve hata ayıklamaya çalışırken faydalı olabilir.
Kırıntı günlükleri Google Analytics tarafından desteklenir. Bu nedenle, breadcrumb günlüklerini almak için Firebase projeniz için Google Analytics'i etkinleştirmeniz ve Google Analytics için Firebase SDK'sını uygulamanıza eklemeniz gerekir. Bu koşullar karşılandığında, bir sorunun ayrıntılarını görüntülediğinizde breadcrumb günlükleri, Günlükler sekmesindeki bir etkinliğin verilerine otomatik olarak eklenir.
Analytics SDK'sı, screen_view
etkinliğini otomatik olarak günlüğe kaydeder. Bu sayede, içerik haritası günlükleri kilitlenme, ölümcül olmayan veya ANR etkinliğinden önce görüntülenen ekranların listesini gösterebilir. screen_view
içerik haritası günlüğünde firebase_screen_class
parametresi var.
İçerik haritası günlükleri ayrıca özel etkinlikler oluşturabilirsiniz. oturumuna ait verileri toplar. Bu veriler, seçtiğiniz seriyi göstermeye yardımcı olabilir Kilitlenme, önemli olmayan veya ANR etkinliğiyle sonuçlanan kullanıcı işlemlerinin sayısı.
Google Analytics verilerinin toplanmasını ve kullanılmasını kontrol edebileceğinizi unutmayın. Bu veriler arasında, içerik haritası günlüklerini dolduran veriler de bulunur.
Etkinleştirme raporlamasını etkinleştirme
Varsayılan olarak Crashlytics, tüm mobil cihazlarınız için kilitlenme raporlarını kullanıcılara ulaşabiliyoruz. Kullanıcılara gönderdikleri veriler üzerinde daha fazla kontrol sahibi olma imkanı tanımak için otomatik raporlamayı devre dışı bırakarak ve yalnızca kodunuzda Crashlytics'ye veri göndermeyi seçtiğinizde etkinleştirerek etkinleştirmeyi etkinleştirebilirsiniz:
Info.plist
dosyanıza yeni bir anahtar ekleyerek otomatik toplamayı devre dışı bırakın:- Anahtar:
FirebaseCrashlyticsCollectionEnabled
- Değer:
false
- Anahtar:
Crashlytics verilerini çağırarak belirli kullanıcılar için veri toplamayı etkinleştirin koleksiyonu geçersiz kılmanın zamanı geldi. Geçersiz kılma değeri, Crashlytics tarafından otomatik olarak toplanabilmesi için uygulamanızın lansmanları
Otomatik kilitlenme raporlamasını devre dışı bırakmak için geçersiz kılma değeri olarak
false
değerini iletin.false
olarak ayarlandığında yeni değer uygulamasını indirin.Swift
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
Objective-C
[[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:YES];
Crash Insights verilerini yönetme
Crash Insights, anonimleştirilmiş yığınınızı karşılaştırarak sorunları çözmenize yardımcı olur diğer Firebase uygulamalarından gelen izleri izler ve sorununuzun büyük bir trendin parçası haline geldi. Crash Insights, sorunların çoğu için kaynak bile sağlar kilitlenmede hata ayıklamanıza yardımcı olur.
Crash Insights, yaygın kararlılık trendlerini belirlemek için birleştirilmiş kilitlenme verilerini kullanır. Uygulamanızın verilerini paylaşmak istemiyorsanız Firebase konsolundaki Crashlytics sorun listenizin üst kısmındaki Kilitlenme Analizleri menüsünden Kilitlenme Analizleri'ni devre dışı bırakabilirsiniz.