Mohamed Hamed
Mohamed Hamed

Reputation: 91

Firebase App configuration crash

I have a custom keyboard for iOS that uses Firebase for analytics. The Firebase app configuration is done at the initializer with a dispatch_once clause with the token as a global variable.

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
  }
// ..
}

This is working fine but I am receiving many crash reports that indicate crashes on many devices when the app is configured. I am stuck for days trying to figure out the cause. Here is a part of one of the crash reports stack trace:

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)

Apparently, the call trace after calling FIRApp.configure() is going through system libraries.

One observation from the stack trace is that the crash has something to do with checking the reachability of the device. However, I tried to reproduce a scenario where there is no internet connection but it's working fine.

Please note that all the crashes are happening on iOS 10 and most of them on iPhone 6.

Any help to figure out the cause of the crashes would be appreciated.

Upvotes: 3

Views: 1711

Answers (1)

adbitx
adbitx

Reputation: 2079

It is not recommended to use Firebase Analytics in an extension as the SDK does not support extension well. App extensions have limited functionalities compared to a full app so Firebase Analytics may not work well under some conditions, like the network in this case. The team is looking into supporting extensions better later.

It seems like the network is not available on custom keyboard as stated by Apple

"By default, a keyboard has no network access and cannot share a container with its containing app. To enable these things, set the value of the RequestsOpenAccess Boolean key in the Info.plist file to YES. Doing this expands the keyboard’s sandbox, as described in Designing for User Trust."

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

Upvotes: 1

Related Questions