Входящий вызов Callkit не отображается в фоновом режиме на старых iPhone (Pushkit / Callkit) - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь реализовать Pushkit / CallKit, но у меня проблемы со старыми iPhone. Отлично работает на iPhone X и iphone XR (13.3). В частности, я тестировал два телефона с проблемами: iPhone SE (13.3.1) и iPhone 7 (11.2.5).

Они работают, когда приложение находится на переднем плане, но когда они находятся в фоновом режиме, пользовательский интерфейс входящего вызова никогда не отображается, даже если получено уведомление VOIP и вызов регистрируется в callkit. Есть предположения? Вот журналы. Вы видите, что уведомление получено, и звонок пытается зарегистрироваться

Date/Time:           2020-05-08 21:03:08.3666 -0400
Launch Time:         2020-05-08 21:02:47.8260 -0400
OS Version:          iPhone OS 11.2.5 (15D60)
Baseband Version:    6.30.04
Report Version:      104

Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Termination Description: SPRINGBOARD, scene-create watchdog transgression: com.coachcare.coachcareionic exhausted real (wall clock) time allowance of 19.25 seconds |  | ProcessVisibility: Foreground | ProcessState: Running | WatchdogEvent: scene-create | WatchdogVisibility: Foreground | WatchdogCPUStatistics: ( | "Elapsed total CPU time (seconds): 9.680 (user 9.680, system 0.000), 70% CPU", | "Elapsed application CPU time (seconds): 5.934, 43% CPU" | )
Triggered by Thread:  0

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x0000000184cff568 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x0000000184cff3e0 mach_msg + 72
2   CoreFoundation                  0x00000001851b3108 __CFRunLoopServiceMachPort + 196
3   CoreFoundation                  0x00000001851b0cd4 __CFRunLoopRun + 1424
4   CoreFoundation                  0x00000001850d0c58 CFRunLoopRunSpecific + 436
5   Foundation                      0x0000000185b05594 -[NSRunLoop+ 50580 (NSRunLoop) runMode:beforeDate:] + 304
6   Foundation                      0x0000000185b249ac -[NSRunLoop+ 178604 (NSRunLoop) runUntilDate:] + 96
7   CoachCare                       0x00000001009a163c 0x100278000 + 7509564
8   CoachCare                       0x000000010027d4b4 0x100278000 + 21684
9   UIKit                           0x000000018e8342c4 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 384
10  UIKit                           0x000000018ea25bc4 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3436
11  UIKit                           0x000000018ea2aa14 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1712
12  UIKit                           0x000000018ecc62a8 __111-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:]_block_invoke + 800
13  UIKit                           0x000000018ef9e100 +[_UICanvas _enqueuePostSettingUpdateTransactionBlock:] + 160
14  UIKit                           0x000000018ecc5f0c -[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 252
15  UIKit                           0x000000018ecc676c -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 732
16  UIKit                           0x000000018f44b7c0 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 260
17  UIKit                           0x000000018f44b664 -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 448
18  UIKit                           0x000000018f1b92cc __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 220
19  UIKit                           0x000000018f3523cc _performActionsWithDelayForTransitionContext + 112
20  UIKit                           0x000000018f1b917c -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 252
21  UIKit                           0x000000018ef9d760 -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 364
22  UIKit                           0x000000018ea29158 -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 540
23  UIKit                           0x000000018ee3edbc -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 364
24  FrontBoardServices              0x00000001878ce1f0 -[FBSSceneImpl _didCreateWithTransitionContext:completion:] + 364
25  FrontBoardServices              0x00000001878d6af8 __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 224
26  libdispatch.dylib               0x0000000184b8aa14 _dispatch_client_callout + 16
27  libdispatch.dylib               0x0000000184b92200 _dispatch_block_invoke_direct$VARIANT$mp + 288
28  FrontBoardServices              0x00000001879027f8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36
29  FrontBoardServices              0x000000018790249c -[FBSSerialQueue _performNext] + 404
30  FrontBoardServices              0x0000000187902a38 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
31  CoreFoundation                  0x00000001851b377c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
32  CoreFoundation                  0x00000001851b36fc __CFRunLoopDoSource0 + 88
33  CoreFoundation                  0x00000001851b2f84 __CFRunLoopDoSources0 + 204
34  CoreFoundation                  0x00000001851b0b5c __CFRunLoopRun + 1048
35  CoreFoundation                  0x00000001850d0c58 CFRunLoopRunSpecific + 436
36  GraphicsServices                0x0000000186f7cf84 GSEventRunModal + 100
37  UIKit                           0x000000018e8295c4 UIApplicationMain + 236
38  CoachCare                       0x000000010027e3dc 0x100278000 + 25564
39  libdyld.dylib                   0x0000000184bf056c start + 4

1 Ответ

0 голосов
/ 14 мая 2020

Исключения с кодом 0x8badf00d часто возникают, когда вы блокируете основной поток чем-то, что не должно быть блокирующей синхронной операцией. Это приведет к тому, что приложение будет слишком долго не реагировать на системные события. Так, например, в вашем ответе на уведомление pu sh вы можете запускать некоторые синхронные сетевые операции или что-то еще, что заблокирует основной поток. В таком случае потребуется перевести блокирующую синхронную операцию в асинхронную.

То, что вы наблюдаете такое поведение только на старых телефонах, имеет для меня смысл: как и в обычных условиях гонки, все, что задерживает основной поток в вашем основном приложении, большую часть времени может выполняться достаточно быстро на новых телефонах. поэтому вы не замечаете его на них вообще или гораздо реже, чем на старых телефонах. Также может быть, что шаблон со старыми телефонами является скорее совпадением, и вместо этого другие факторы, такие как скорость соединения / мощность сигнала, задерживают операцию блокировки ровно настолько, чтобы заставить iOS убить ваше приложение только в некоторых случаях, потому что основной поток был заблокирован слишком долго.

Имейте в виду, что причина блокировки основного потока иногда может быть довольно сложной и выходить за рамки вашего собственного кода (например, это может быть ошибка в какой-то библиотеке). Я нашел это описание ошибки Firebase , где, по-видимому, ошибка в Firebase iOS SDK вызвала блокировку основного потока.

См. техническое примечание Apple о коде 0x8badf00d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...