Crashlytics не передает событие аварии в Fabric.io (только в режиме отладки?) - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема похожая на [ xCode 9.3 и Firebase Crashlytics не работает .Я могу вызвать сбой в отладочной версии основного приложения, и сбой появляется в консоли на Fabric.io.Я также сделал способ (используя «пасхальное яйцо») вызвать сбой в коде фреймворка.Я пробовал три разных подхода.Первые два являются попытками смоделировать «реальный» сбой, возникающий в самом коде платформы.Третий использует «поддельный» обратный вызов основного приложения.Обратите внимание, что в приведенном ниже коде я показываю все три подхода вместе, но в реальной жизни я комментирую два из них, чтобы протестировать один подход:

//#1
@throw ([NSException exceptionWithName:@"CrashlyticsForce" reason:@"Easter egg hit" userInfo:nil]);

//#2
NSDecimalNumber *i = [NSDecimalNumber decimalNumberWithDecimal:[@(1) decimalValue]];
NSDecimalNumber *o = [NSDecimalNumber decimalNumberWithDecimal:[@(0) decimalValue]];
// Divide by 0 to throw an exception
NSDecimalNumber *x = [i decimalNumberByDividingBy:o];    

//#3 The following DOES work, but it's really lame because the crash
// actually gets forced in the main app via this bogus call to a
// protocol method implemented in the app for the sole purpose of
// enabling the engine to force a crash.
[(NSObject <NSAlertDelegate> *)[NSApp delegate] alertShowHelp:
[NSAlert alertWithMessageText:@"Forcing an error" defaultButton:nil
alternateButton:nil otherButton:nil
informativeTextWithFormat:@"Forcing error from framework!"]];

NSLog(@"Crashlytics - KME: You should not be seeing this line!");

Для третьего подходаОсновное приложение обрабатывает обратный вызов, вызывая

[[Crashlytics sharedInstance] crash];

. При использовании подхода № 3 Crashlytics немедленно загружает смоделированный сбой в консоль Fabric.io, где я могу видеть.Подходящих подходов нет.Непонятно, действительно ли они вызывают сбой приложения, хотя элемент управления покидает метод (потому что последний оператор NSLog никогда не отображается в консоли. Приложение представляет собой метод ввода, поэтому ОС может перезапустить его автоматически. Я попытался перезапуститькомпьютер сразу после принудительного сбоя, потому что я знаю, что обычно Crashlytics не будет передавать сбой, пока приложение не будет перезапущено. Когда я это делаю, я вижу следующее в консоли при перезапуске приложения:

[Crashlytics] Version 3.10.1 (129)
[Crashlytics] Running on MacBookPro11,4, 10.13.4 (17E202)
[Answers] Initialized
[Fabric] Initialized with kit versions: {
    "com.twitter.answers.mac" = "1.3.7";
    "com.twitter.crashlytics.mac" = "3.10.1";
    "io.fabric.sdk.mac" = "1.7.6";
}
Faulting in NSHTTPCookieStorage singleton
Faulting in CFHTTPCookieStorage singleton
Creating default cookie storage with process/bundle identifier
Initializing Keyman Input Method with server: <IMKServer: 0x6040000147b0>
TIC Enabling TLS [1:0x6040001717c0]
TIC TCP Conn Start [1:0x6040001717c0]
Task <3C62019C-7486-469F-B4AE-9D4DDC7DB101>.<1> setting up Connection 1
[1 <private> <private>] start
New active app com.lastpass.LastPass
sender <IPMDServerClientWrapper: 0x6080002805f0>
TIC TLS Event [1:0x6040001717c0]: 1, Pending(0)
TIC TLS Event [1:0x6040001717c0]: 2, Pending(0)
UNIX error exception: 17
UNIX error exception: 17
UNIX error exception: 17
TIC TLS Event [1:0x6040001717c0]: 11, Pending(0)
TIC TLS Event [1:0x6040001717c0]: 12, Pending(0)
TIC TLS Event [1:0x6040001717c0]: 14, Pending(0)
System Trust Evaluation yielded status(0)
TIC TLS Trust Result [1:0x6040001717c0]: 0
TIC TLS Event [1:0x6040001717c0]: 20, Pending(0)
TIC TCP Conn Connected [1:0x6040001717c0]: Err(16)
TIC TCP Conn Event [1:0x6040001717c0]: 1
TIC TCP Conn Event [1:0x6040001717c0]: 8
TIC TLS Handshake Complete [1:0x6040001717c0]
Task <3C62019C-7486-469F-B4AE-9D4DDC7DB101>.<1> now using Connection 1
Task <3C62019C-7486-469F-B4AE-9D4DDC7DB101>.<1> sent request, body N
Task <3C62019C-7486-469F-B4AE-9D4DDC7DB101>.<1> received response, status 200 content K
Task <3C62019C-7486-469F-B4AE-9D4DDC7DB101>.<1> response ended
[Fabric] settings downloaded successfully
[Fabric] Settings are available for consumption
TIC TCP Conn Cancel [1:0x6040001717c0]
[1 <private> stream, pid: 649, url: https://settings.crashlytics.com/spi/v2/platforms/mac/apps/keyman.inputmethod.Keyman/settings?build_version=10.0.0&display_version, tls] cancelled
    [1.1 074D1109-26C9-44B8-834C-F53EF153DACA <private>.49357<-><private>]
    Connected Path: satisfied (Path is satisfied), interface: en0, ipv4, dns
    Duration: 0.218s, DNS @0.000s took 0.020s, TCP @0.024s took 0.023s, TLS took 0.123s
    bytes in/out: 7265/1338, packets in/out: 9/3, rtt: 0.019s, retransmitted packets: 0, out-of-order packets: 0
2018-05-25 10:43:13.267599 -0400    Keyman  [Answers] Answers enabled with settings: {
    "flush_interval_secs" = 300;
    "flush_on_background" = 1;
    "forward_to_google_analytics" = 0;
    "include_purchase_events_in_forwarded_events" = 0;
    "max_byte_size_per_file" = 8000;
    "max_file_count_per_send" = 1;
    "max_pending_send_file_count" = 100;
    "sampling_rate" = 1;
    "track_custom_events" = 1;
    "track_predefined_events" = 1;
    "track_view_controllers" = 0;
    url = "https://e.crashlytics.com/spi/v2/events";
}
[Answers] Logging events to /Users/tom/Library/Caches/com.crashlytics.data/keyman.inputmethod.Keyman/analytics/v2/events
[Answers] Transmitting packaged events for '87099A49-DC62-4E10-AB2D-A98394173E21'.
TIC Enabling TLS [2:0x60c000171340]
TIC TCP Conn Start [2:0x60c000171340]
Task <CCB3C9EE-3123-42F8-A98D-D009EBF34DEB>.<1> setting up Connection 2
[2 <private> <private>] start
TIC TLS Event [2:0x60c000171340]: 1, Pending(0)
TIC TLS Event [2:0x60c000171340]: 2, Pending(0)
TIC TLS Event [2:0x60c000171340]: 11, Pending(0)
TIC TLS Event [2:0x60c000171340]: 12, Pending(0)
TIC TLS Event [2:0x60c000171340]: 14, Pending(0)
System Trust Evaluation yielded status(0)
TIC TLS Trust Result [2:0x60c000171340]: 0
TIC TLS Event [2:0x60c000171340]: 20, Pending(0)
TIC TCP Conn Connected [2:0x60c000171340]: Err(16)
TIC TCP Conn Event [2:0x60c000171340]: 1
TIC TCP Conn Event [2:0x60c000171340]: 8
TIC TLS Handshake Complete [2:0x60c000171340]
Task <CCB3C9EE-3123-42F8-A98D-D009EBF34DEB>.<1> now using Connection 2
Task <CCB3C9EE-3123-42F8-A98D-D009EBF34DEB>.<1> sent request, body S
Task <CCB3C9EE-3123-42F8-A98D-D009EBF34DEB>.<1> received response, status 200 content K
Task <CCB3C9EE-3123-42F8-A98D-D009EBF34DEB>.<1> response ended
[Answers] Finished transmission of '87099A49-DC62-4E10-AB2D-A98394173E21'.
LSExceptions shared instance invalidated for timeout.

InВ производственной версии приложения я вижу реальные сбои в Fabric.io, которые происходят в коде фреймворка. В рабочих версиях используется другой код API, и он встроен в выпуск, а не в отладку, но я думаю, чтовсе параметры удаления символов и создания dSYM одинаковы для отладки и выпуска. Также, FWIW, я попытался использовать код № 1 и № 2, чтобы вызвать сбой в обратном вызове в главном приложении (вместо вызова [[Crashlytics sharedInstance] crash).]) и Crashlytics не отвечаетили оттуда.Так что, похоже, это не имеет ничего общего с самой платформой.

...