Crash in UIKeyboardStateManager when repeatedly switching text input focus in WKWebView (hybrid app)

We’re building a hybrid iOS app using Angular (web) rendered inside a WKWebView, hosted by a native Swift app.

Recently, we encountered a crash related to UIKeyboardStateManager in UIKit when switching between text inputs continuously within an Angular screen.

Scenario

  • The screen contains several text input fields.
  • A “Next” button focuses the next input field programmatically.
  • After about 61 continuous input field changes, the app crashes.

It seems like this may be related to UIKit’s internal keyboard management while switching focus rapidly inside a WebView.

crash stack:

Crashed: com.apple.main-thread
0  WebKit                         0xfbdad0 <redacted> + 236
1  UIKitCore                      0x10b0548 -[UITextInteractionSelectableInputDelegate _moveToStartOfLine:withHistory:] + 96
2  UIKitCore                      0xd0fb38 -[UIKBInputDelegateManager _moveToStartOfLine:withHistory:] + 188
3  UIKitCore                      0xa16174 __158-[_UIKeyboardStateManager handleMoveCursorToStartOfLine:beforePublicKeyCommands:testOnly:savedHistory:force:canHandleSelectableInputDelegateCommand:keyEvent:]_block_invoke + 52
4  UIKitCore                      0xa36ae4 -[_UIKeyboardStateManager performBlockWithTextInputChangesIgnoredForNonMacOS:] + 48
5  UIKitCore                      0xa160f0 -[_UIKeyboardStateManager handleMoveCursorToStartOfLine:beforePublicKeyCommands:testOnly:savedHistory:force:canHandleSelectableInputDelegateCommand:keyEvent:] + 440
6  UIKitCore                      0xa07010 -[_UIKeyboardStateManager handleKeyCommand:repeatOkay:options:] + 5760
7  UIKitCore                      0xa2fb64 -[_UIKeyboardStateManager _handleKeyCommandCommon:options:] + 76
8  UIKitCore                      0xa2fb08 -[_UIKeyboardStateManager _handleKeyCommand:] + 20
9  UIKitCore                      0xa30684 -[_UIKeyboardStateManager handleKeyEvent:executionContext:] + 2464
10 UIKitCore                      0xa2f95c __42-[_UIKeyboardStateManager handleKeyEvent:]_block_invoke + 40
11 UIKitCore                      0x4b9460 -[UIKeyboardTaskEntry execute:] + 208
12 UIKitCore                      0x4b92f4 -[UIKeyboardTaskQueue continueExecutionOnMainThread] + 356
13 UIKitCore                      0x4b8be0 -[UIKeyboardTaskQueue addTask:breadcrumb:] + 120
14 UIKitCore                      0x4a9ed0 -[_UIKeyboardStateManager _setupDelegate:delegateSame:hardwareKeyboardStateChanged:endingInputSessionIdentifier:force:delayEndInputSession:] + 3388
15 UIKitCore                      0xfa290 -[_UIKeyboardStateManager setDelegate:force:delayEndInputSession:] + 628
16 UIKitCore                      0xf617c -[UIKeyboardSceneDelegate _reloadInputViewsForKeyWindowSceneResponder:force:fromBecomeFirstResponder:] + 1140
17 UIKitCore                      0xf5c88 -[UIKeyboardSceneDelegate _reloadInputViewsForResponder:force:fromBecomeFirstResponder:] + 88
18 UIKitCore                      0x4fe4ac -[UIResponder(UIResponderInputViewAdditions) reloadInputViews] + 84
19 WebKit                         0xfbe708 <redacted> + 100
20 WebKit                         0xfbf594 <redacted> + 340
21 WebKit                         0x8a33d8 <redacted> + 32
22 WebKit                         0x8cee04 <redacted> + 144
23 WebKit                         0x1c83f0 <redacted> + 22692
24 WebKit                         0x73f40 <redacted> + 264
25 WebKit                         0x162c7c <redacted> + 40
26 WebKit                         0x1623b4 <redacted> + 1608
27 WebKit                         0x73298 <redacted> + 268
28 WebKit                         0x72e48 <redacted> + 660
29 JavaScriptCore                 0xdb00 WTF::RunLoop::performWork() + 524
30 JavaScriptCore                 0xd744 WTF::RunLoop::performWork(void*) + 36
31 CoreFoundation                 0xf92c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
32 CoreFoundation                 0xf744 __CFRunLoopDoSource0 + 172
33 CoreFoundation                 0xf5a0 __CFRunLoopDoSources0 + 232
34 CoreFoundation                 0xff20 __CFRunLoopRun + 840
35 CoreFoundation                 0x11adc CFRunLoopRunSpecific + 572
36 GraphicsServices               0x1454 GSEventRunModal + 168
37 UIKitCore                      0x135274 -[UIApplication _run] + 816
38 UIKitCore                      0x100a28 UIApplicationMain + 336
39 APP1                          0xa2ed0 main + 21 (AppDelegate.swift:21)
40 ???                            0x1aa889f08 (シンボルが不足しています)

From reviewing the crash log, it appears that the crash occurs inside UIKeyboardStateManager while handling keyboard or cursor updates.

Questions

  • Has anyone seen this specific crash pattern involving UIKeyboardStateManager?
  • Are there known UIKit or WebKit bugs related to UIKeyboardStateManager when continuously changing focus between text fields (especially in WKWebView)?

Any insights or workarounds would be greatly appreciated. Thanks!

Crash in UIKeyboardStateManager when repeatedly switching text input focus in WKWebView (hybrid app)
 
 
Q