容器应用程序崩溃:需要从 Crashlytics 获取更多信息

Container App Crashing: More Information Needed from Crashlytics

与我合作的开发团队制作了一个服务于客户移动站点的容器应用程序。我们可以看到容器应用程序在 iOS 10 崩溃,但没有太多关于问题原因的信息。除了 Webkit 和 JS Core 可能存在的问题外,堆栈跟踪并没有指向太多:

Crashed: com.apple.main-thread
0  WebKit                         0x19673fddc API::Object::ref() + 2
1  WebKit                         0x1968bb35c WebKit::WebPageProxy::didStartProvisionalLoadForFrame(unsigned long long, unsigned long long, WTF::String const&, WTF::String const&, WebKit::UserData const&) + 192
2  WebKit                         0x1968d621c void IPC::handleMessage<Messages::WebPageProxy::DidStartProvisionalLoadForFrame, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, WTF::String const&, WebKit::UserData const&)>(IPC::MessageDecoder&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, unsigned long long, WTF::String const&, WTF::String const&, WebKit::UserData const&)) + 100
3  WebKit                         0x1967941d0 IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::MessageDecoder&) + 120
4  WebKit                         0x196917614 WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&) + 32
5  WebKit                         0x19675d3e8 IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::MessageDecoder, std::__1::default_delete<IPC::MessageDecoder> >) + 160
6  WebKit                         0x19675fa00 IPC::Connection::dispatchOneMessage() + 204
7  JavaScriptCore                 0x191b4c834 WTF::RunLoop::performWork() + 172
8  JavaScriptCore                 0x191b4ca60 WTF::RunLoop::performWork(void*) + 36
9  CoreFoundation                 0x18d332b5c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
10 CoreFoundation                 0x18d3324a4 __CFRunLoopDoSources0 + 524
11 CoreFoundation                 0x18d3300a4 __CFRunLoopRun + 804
12 CoreFoundation                 0x18d25e2b8 CFRunLoopRunSpecific + 444
13 GraphicsServices               0x18ed12198 GSEventRunModal + 180
14 UIKit                          0x1932a57fc -[UIApplication _run] + 684
15 UIKit                          0x1932a0534 UIApplicationMain + 208
16 Betfred                        0x10005c250 main (main.m:16)
17 libdispatch.dylib              0x18c2415b8 (Missing)

内部没有人能够让应用程序可靠地崩溃(包括全天候使用它的测试团队),据我们所知,移动网站没有问题。

我被要求调查这个问题,但我有点不知所措,因为如果我不能始终如一地解决它,我就无法诊断和修复它。

有什么方法可以让我们从 Crashlytics 获得有关此崩溃原因的更多信息?

来自 Fabric 的 Mike 和这样的崩溃很难追踪。您需要发布应用的新版本,但可以通过三种不同的方式获取更多信息。

1) 添加 custom keys,例如跟踪正在加载哪些页面或正在访问哪些端点,可以提供额外的上下文:

- (void)setObjectValue:(id)value forKey:(NSString *)key;

// calls -description on value, perfect for NSStrings!
- (void)setIntValue:(int)value forKey:(NSString *)key;

- (void)setBoolValue:(BOOL)value forKey:(NSString *)key;

- (void)setFloatValue:(float)value forKey:(NSString *)key;

2) 添加 custom logs 作为面包屑的一种形式,以便更容易地重现用户在崩溃前所做的步骤:

CLS_LOG(@"User clicked on menu %@", attributesDict);

3) 添加user identifiers:

[CrashlyticsKit setUserIdentifier:@"123456789"];
[CrashlyticsKit setUserEmail:@"person@domain.com"];
[CrashlyticsKit setUserName:@"Awesome AppUser"];

当所有其他方法都失败时,联系用户以获取更多信息也可以帮助追踪。