2016-10-24 3 views
0

У меня есть пользовательская клавиатура для iOS, которая использует Firebase для аналитики. Конфигурация приложения Firebase выполняется в инициализаторе с предложением dispatch_once с токеном в качестве глобальной переменной.Ошибка конфигурации конфигурации Firebase

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() происходит через систему библиотек.

Одно наблюдение из трассировки стека заключается в том, что авария имеет какое-то отношение к проверке доступности устройства. Однако я попытался воспроизвести сценарий, в котором нет подключения к Интернету, но он работает нормально.

Пожалуйста, обратите внимание, что все аварии происходят на прошивке 10 и большинство из них на iPhone 6.

Любой помощь, чтобы выяснить причину аварии будет оценен.

+0

Вы сказали о "специальной клавиатуры". Вы используете Firebase Analytics в расширении? Это случилось с другими iOS, кроме 10? – adbitx

+0

Да, я использую FB Analytics в расширении. Nope id не произошел ни в одной версии iOS, кроме iOS 10. –

+0

Спасибо, что предоставили нам информацию. Мы рассмотрим эту проблему. – adbitx

ответ

1

Не рекомендуется использовать Firebase Analytics в расширении, так как SDK не поддерживает расширение. Расширения приложений имеют ограниченные функциональные возможности по сравнению с полным приложением, поэтому Firebase Analytics может не работать хорошо в некоторых условиях, например в сети. Команда лучше изучает поддержку расширений.

Похоже, что сеть не доступен на специальной клавиатуре, как указано Яблоком

«По умолчанию, клавиатура не имеет доступа к сети и не может совместно использовать контейнера содержащего его приложение. Чтобы включить эти вещи , установите значение логического ключа RequestsOpenAccess в файле Info.plist на . Да. Это расширяет изолированную программную среду клавиатуры, как описано в «Конструирование для пользователя».

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

+0

Спасибо Alex D за ваш ответ. Мы используем FB Analytics для отслеживания интересующих вас событий. Надеюсь, что команды FB лучше поддерживают расширения. Обратите внимание, что у меня уже есть 'RequestsOpenAccess'. –

+0

Спасибо за дополнительную информацию. Я предполагаю, что некоторые базовые библиотеки в Firebase Analytics не работают с расширением, даже если вы задали RequestsOpenAccess в вашем Info.plist. – adbitx

+0

Я создал расширение клавиатуры с SDK Firebase Analytics и попытался запустить его на iPhone 6 iOS 10. Он работал хорошо, насколько я мог сказать (с помощью RequestOpenAccess). Я не знаю, какая разница между вашей реализацией и моей. То, что я сделал, было вызвано FIRApp.configure(), когда было вызвано уведомление UIApplicationDidFinishLaunchingNotification. – adbitx