App Crash in GameController when accessing GCKeyboard.coalesced on iPad

We are developing a hybrid iOS app where Angular content is rendered inside a WKWebView, hosted by a native Swift application.

We use the GameController framework to detect whether an external Bluetooth keyboard is connected to an iPad. The following code is executed when the app enters the foreground and also when requested by the web layer:

    func keyboardStatusHandler(){
        let isKeyboardConnected = GCKeyboard.coalesced != nil
        if(!isKeyboardConnected){
            //sent status to Angular
        } else {
            //sent status to Angular
        }
    }

Crash details

We are seeing intermittent crashes on iPad with the following stack trace:

Crashed: GCDeviceSession.HID
0  libobjc.A.dylib                0x7db8 objc_retain_x8 + 16
1  libsystem_blocks.dylib         0xfb8 void HelperBase<ExtendedInline>::copyCapture<(HelperBase<ExtendedInline>::BlockCaptureKind)3>(unsigned int) + 48
2  libsystem_blocks.dylib         0xbc4 HelperBase<GenericInline>::copyBlock(Block_layout*, Block_layout*) + 108
3  libsystem_blocks.dylib         0xc94 _call_copy_helpers_excp + 60
4  libsystem_blocks.dylib         0xef8 _Block_copy + 412
5  libdispatch.dylib              0x1a70 _dispatch_Block_copy + 32
6  libdispatch.dylib              0x792c dispatch_async + 56
7  libdispatch.dylib              0x792c dispatch_channel_async + 56
8  GameController                 0xea6dc -[GCKeyboardInput _handleKeyboardEvent:] + 324
9  GameController                 0x22508 __53-[_GCKeyboardEventHIDAdapter initWithSource:service:]_block_invoke + 376
10 GameController                 0x11d30 -[_GCHIDEventSubject publishHIDEvent:] + 268
11 GameController                 0xb79cc __40-[_GCHIDEventUIKitClient initWithQueue:]_block_invoke_3 + 44
12 libdispatch.dylib              0x1b584 _dispatch_client_callout + 16
13 libdispatch.dylib              0x12088 _dispatch_async_and_wait_invoke_and_complete_recurse + 272
14 libdispatch.dylib              0x8448 _dispatch_async_and_wait_f + 108
15 GameController                 0xb7984 __40-[_GCHIDEventUIKitClient initWithQueue:]_block_invoke_2 + 132
16 GameController                 0xb746c __48-[__GCHIDEventUIKitClient _initWithApplication:]_block_invoke + 256
17 UIKitCore                      0x11fd394 __61-[UIEventFetcher _setHIDGameControllerEventObserver:onQueue:]_block_invoke_3 + 40
18 libdispatch.dylib              0x1aac _dispatch_call_block_and_release + 32
19 libdispatch.dylib              0x1b584 _dispatch_client_callout + 16
20 libdispatch.dylib              0xa2d0 _dispatch_lane_serial_drain + 740
21 libdispatch.dylib              0xadac _dispatch_lane_invoke + 388
22 libdispatch.dylib              0x151dc _dispatch_root_queue_drain_deferred_wlh + 292
23 libdispatch.dylib              0x14a60 _dispatch_workloop_worker_thread + 540
24 libsystem_pthread.dylib        0xa0c _pthread_wqthread + 292
25 libsystem_pthread.dylib        0xaac start_wqthread + 8

Observed scenarios

  • Crash occurs when the app transitions from background to foreground
  • Crash also occurs when the Angular layer requests keyboard status, triggering the same code path

Questions

  • Has anyone encountered crashes related to GCKeyboard.coalesced or GCKeyboardInput like this?
  • Are there known issues with the GameController framework when querying keyboard state during app lifecycle transitions?
  • Is there a recommended or safer way to detect external keyboard connection status on iPad (especially when using WKWebView)?

Any insights, known platform issues, or suggested workarounds would be greatly appreciated.

Thanks!

App Crash in GameController when accessing GCKeyboard.coalesced on iPad
 
 
Q