Firebase应用配置崩溃

3

我有一个用于iOS的自定义键盘,使用Firebase进行分析。 Firebase应用程序配置在初始化器中使用dispatch_once子句完成,并将令牌作为全局变量。

var token: dispatch_once_t = 0

class KeyboardViewController: UIInputViewController {
// ..
  override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    dispatch_once(&token) {
        FIRApp.configure()
    } // line 90
  }
// ..
}

这个功能本身是正常工作的,但是我收到了很多崩溃报告,显示许多设备在配置应用程序时发生了崩溃。我已经卡住了好几天,试图找出原因。以下是其中一个崩溃报告的部分堆栈跟踪:

Exception Type:  EXC_CRASH (SIGQUIT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Termination Signal: Quit: 3
Termination Reason: Namespace SIGNAL, Code 0x3
Terminating Process: launchd [1]
Triggered by Thread:  0

Thread 0 name:
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x000000018fab6338 __semwait_signal_nocancel + 8
1   libsystem_c.dylib               0x000000018f9e20dc nanosleep$NOCANCEL + 200 (nanosleep.c:104)
2   libsystem_c.dylib               0x000000018fa0568c sleep$NOCANCEL + 44 (sleep.c:62)
3   libsystem_dnssd.dylib           0x000000018fa6e7d4 ConnectToServer + 832 (dnssd_clientstub.c:607)
4   libsystem_dnssd.dylib           0x000000018fa6ff44 DNSServiceCreateConnection + 76 (dnssd_clientstub.c:1785)
5   libsystem_network.dylib         0x000000018fb2d318 __nw_resolver_set_update_handler_block_invoke + 872 (resolver.m:1031)
6   libdispatch.dylib               0x000000018f9711c0 _dispatch_client_callout + 16 (object.m:455)
7   libdispatch.dylib               0x000000018f97e860 _dispatch_barrier_sync_f_invoke + 84 (queue.c:3457)
8   libsystem_network.dylib         0x000000018fb2ce78 nw_resolver_set_update_handler + 208 (resolver.m:1275)
9   SystemConfiguration             0x0000000190f8a16c __SCNetworkReachabilityRestartResolver + 260 (SCNetworkReachability.c:1711)
10  SystemConfiguration             0x0000000190f891c8 __SCNetworkReachabilitySetDispatchQueue + 764 (SCNetworkReachability.c:1823)
11  SystemConfiguration             0x0000000190f88ccc SCNetworkReachabilityScheduleWithRunLoop + 504 (SCNetworkReachability.c:1586)
12  CustomKeyboard              0x000000010013f630 -[FIRReachabilityChecker start] + 196
13  CustomKeyboard              0x000000010013abac -[FIRNetwork init] + 156
14  CustomKeyboard              0x0000000100132e28 -[FIRClearcutLogger init] + 416
15  CustomKeyboard              0x0000000100132c68 __35+[FIRClearcutLogger sharedInstance]_block_invoke + 36
16  libdispatch.dylib               0x000000018f9711c0 _dispatch_client_callout + 16 (object.m:455)
17  libdispatch.dylib               0x000000018f971fb4 dispatch_once_f + 56 (once.c:57)
18  CustomKeyboard              0x0000000100132c40 +[FIRClearcutLogger sharedInstance] + 108
19  CustomKeyboard              0x0000000100137214 +[FIRApp initClearcut] + 60
20  CustomKeyboard              0x0000000100136688 +[FIRApp configureDefaultAppWithOptions:sendingNotifications:] + 132
21  CustomKeyboard              0x000000010013643c +[FIRApp configure] + 316
22  libdispatch.dylib               0x000000018f9711c0 _dispatch_client_callout + 16 (object.m:455)
23  libdispatch.dylib               0x000000018f971fb4 dispatch_once_f + 56 (once.c:57)
24  CustomKeyboard              0x00000001000e314c _TFC19CustomKeyboard22KeyboardViewControllercfT7nibNameGSqSS_6bundleGSqCSo8NSBundle__S0_ + 1500 (KeyboardViewController.swift:90)
25  CustomKeyboard              0x00000001000e3270 _TToFC19CustomKeyboard22KeyboardViewControllercfT7nibNameGSqSS_6bundleGSqCSo8NSBundle__S0_ + 112 (KeyboardViewController.swift:0)
26  UIKit                           0x00000001971f7688 -[_UIViewServiceViewControllerOperator __createViewController:withContextToken:fbsDisplays:appearanceSerializedRepresentations:legacyAppearance:traitCollection:initialInterfaceOrientation:hostAccessibilityServerPort:canShowTextServices:replyHandler:] + 2216 (UIViewServiceViewControllerOperator.m:1732)
27  CoreFoundation                  0x0000000190aee160 __invoking___ + 144
28  CoreFoundation                  0x00000001909e1c3c -[NSInvocation invoke] + 284 (NSForwarding.m:2948)
29  CoreFoundation                  0x00000001909e66ec -[NSInvocation invokeWithTarget:] + 60 (NSForwarding.m:3019)

显然,在调用FIRApp.configure()之后,呼叫跟踪正在通过系统库进行。

从堆栈跟踪中观察到的一点是,崩溃与检查设备可达性有关。但是,我尝试重现了没有互联网连接的情况,但它却正常工作。

请注意,所有崩溃都发生在iOS 10上,大部分发生在iPhone 6上。

如果能帮助找出崩溃原因,将不胜感激。


你提到了“自定义键盘”。你在扩展中使用Firebase分析吗?这个问题也发生在iOS 10以外的其他版本吗? - adbitx
是的,我正在使用FB Analytics在一个扩展中。不,除了iOS 10之外,它没有发生在任何其他iOS版本中。 - Mohamed Hamed
感谢您提供这些信息。我们会深入研究这个问题。 - adbitx
1个回答

1
不建议在扩展中使用Firebase Analytics,因为SDK不支持扩展。与完整应用程序相比,应用程序扩展的功能有限,因此Firebase Analytics可能在某些情况下无法正常工作,例如在网络方面。团队正在研究如何更好地支持扩展。
似乎按照苹果公司所述,在自定义键盘上网络不可用。默认情况下,键盘没有网络访问权限,也不能与其包含的应用程序共享容器。要启用这些功能,请将Info.plist文件中RequestsOpenAccess布尔键的值设置为YES。这样做会扩展键盘的沙箱,如“设计用户信任”所述。

https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/CustomKeyboard.html#//apple_ref/doc/uid/TP40014214-CH16-SW1


感谢Alex D的回复。我们正在使用FB Analytics来跟踪一些感兴趣的事件。希望FB团队能更好地支持扩展。请注意,我已经设置了“RequestsOpenAccess”。 - Mohamed Hamed
感谢提供更多信息。我猜测即使在Info.plist中设置了RequestsOpenAccess,Firebase Analytics中的一些底层库在扩展上也无法工作。 - adbitx
我使用Firebase Analytics SDK创建了一个键盘扩展,并尝试在iPhone 6 iOS 10上运行它。据我所知,它目前工作得很好(使用RequestOpenAccess)。我不知道你的实现和我的有什么区别。我所做的是在UIApplicationDidFinishLaunchingNotification通知被调用时调用FIRApp.configure()。 - adbitx
1
我们在运行iOS 11.3和11.4的iPhone和iPad上经常遇到相同类型的崩溃。我们的应用程序也是一个自定义键盘应用程序,RequestsOpenAccess设置为true。 - Tom Bogle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接