У меня есть приложение для iOS (swift), доступное в AppStore с ноября 2017 года. Я добавил Firebase Analytics и Crashlytics, чтобы заранее видеть проблемы, которые не возникали во время разработки и тестирования.
В настоящее время я борюсь сследующий Stacktrace, который я получаю несколько раз на моей панели инструментов Firebase Crashlytics:
Stacktrace от Firebase
Fatal Exception: NSInternalInconsistencyException этот запрос был кастрирован - вы можете'call -sendResponse: дважды, ни после его кодирования
Fatal Exception: NSInternalInconsistencyException
0 CoreFoundation 0x1ac20bef8 __exceptionPreprocess
1 libobjc.A.dylib 0x1ab3d9a40 objc_exception_throw
2 CoreFoundation 0x1ac12006c +[_CFXNotificationTokenRegistration keyCallbacks]
3 Foundation 0x1acc0c3e0 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]
4 BaseBoard 0x1aea6cd68 __40-[BSAction sendResponse:withCompletion:]_block_invoke
5 libdispatch.dylib 0x1abc44484 _dispatch_client_callout
6 libdispatch.dylib 0x1abc24754 _dispatch_lane_barrier_sync_invoke_and_complete
7 BaseBoard 0x1aea20c60 -[BSAction sendResponse:withCompletion:]
8 UIKitCore 0x1d8c20698 -[UIHandleRemoteNotificationAction sendResponse:]
9 UIKitCore 0x1d9054d3c __91-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:]_block_invoke_3.2891
10 libdispatch.dylib 0x1abc436c8 _dispatch_call_block_and_release
11 libdispatch.dylib 0x1abc44484 _dispatch_client_callout
12 libdispatch.dylib 0x1abc23b44 _dispatch_main_queue_callback_4CF$VARIANT$armv81
13 CoreFoundation 0x1ac19a1bc __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
14 CoreFoundation 0x1ac195084 __CFRunLoopRun
15 CoreFoundation 0x1ac1945b8 CFRunLoopRunSpecific
16 GraphicsServices 0x1ae408584 GSEventRunModal
17 UIKitCore 0x1d903cbc8 UIApplicationMain
18 <APP-NAME> 0x10251bc84 main (AppDelegate.swift:18)
19 libdyld.dylib 0x1abc54b94 start
Странно то, что во время разработки и тестирования эта конкретная ошибка вообще не возникает.
Iсделал много исследований в последние дни по этой теме.Я нашел несколько SO сообщений, где эта проблема была решена.
Проблема фонового извлечения iOS8
iOS 8 NSInternalInconsistencyException
Невозможно понять, где происходит сбой MyApp
В основном сбой происходит, когда вы вызываете completionHandler
дважды.Но в разных постах они ссылаются на 2 разных метода, но оба имеют одинаковые completionHandler
:
executeFetchWitchCompletionHandler
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// code here
completionHandler(.newData)
}
didReceiveRemoteNotification
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// code here
completionHandler(.newData)
}
Я не могу найти позицию, где я вызываю завершениеHandler обоих методов дважды.Мой вопрос будет, если возможно реализовать оба метода в AppDelegate без получения вышеупомянутой ошибки выше.Или параллельная реализация двух методов performFetchWitchCompletionHandler
и didReceiveRemoteNotification
мешает друг другу?