Firebase 应用配置崩溃
Posted
技术标签:
【中文标题】Firebase 应用配置崩溃【英文标题】:Firebase App configuration crash 【发布时间】:2016-10-24 18:35:30 【问题描述】:我有一个使用 Firebase 进行分析的 ios 自定义键盘。 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 Analytics?除了 10 之外的其他 iOS 上是否发生过这种情况? 是的,我正在扩展中使用 FB Analytics。除了 iOS 10 以外的任何 iOS 版本中都没有出现 id。 感谢您向我们提供信息。我们将深入研究这个问题。 【参考方案1】:不建议在扩展中使用 Firebase Analytics,因为 SDK 不能很好地支持扩展。与完整应用相比,应用扩展的功能有限,因此 Firebase Analytics 在某些情况下可能无法正常运行,例如本例中的网络。该团队正在考虑稍后更好地支持扩展。
Apple 声明的自定义键盘上似乎无法使用网络
"默认情况下,键盘没有网络访问权限,不能共享 容器及其包含的应用程序。要启用这些功能,请设置 Info.plist 文件中 RequestsOpenAccess 布尔键的值 是的。这样做会扩展键盘的沙箱,如中所述 为用户信任而设计。”
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
sat。
感谢您提供更多信息。我猜即使您在 Info.plist 中设置了 RequestsOpenAccess,Firebase Analytics 中的一些底层库也无法在扩展上运行。
我使用 Firebase Analytics SDK 创建了一个键盘扩展,并尝试在 iPhone 6 iOS 10 上运行它。据我所知(使用 RequestOpenAccess)它运行良好。我不知道你的实现和我的有什么区别。我所做的是在调用通知 UIApplicationDidFinishLaunchingNotification 时调用 FIRApp.configure()。
我们在运行 iOS 11.3 和 11.4 的 iPhone 和 iPad 上经常遇到相同类型的崩溃。我们的应用也是一个自定义键盘应用,RequestsOpenAccess 设置为 true。以上是关于Firebase 应用配置崩溃的主要内容,如果未能解决你的问题,请参考以下文章
使用选项配置 firebase 在 Xcode 11 和 Firebase 6.19 中崩溃
FirebaseApp.configure() 在启动时使应用程序崩溃
应用程序崩溃 [FIRApp appWasConfiguredTwice:usingOptions:]