App is mostly written in Swift with some Objective-C code. Recently I discovered that connecting a Bluetooth keyboard to the iPad causes some severe 2+ second hangs in this app.
Using Time Profiler has exposed the functions that are causing the hang (backtrace below), but my question is how can I stop this from happening?
The CPU usage also spikes to 100%.
These hangs only happen when the Bluetooth keyboard is connected to the iPad. If I turn off Bluetooth on the iPad it goes back to running smoothly.
It seems to hang when I try and make touches that effect UI on the screen, but it isn't always the same actions that trigger the hang.
I tried to override these methods/variables around UIKit.UIFocus but it hasn't made any difference:
- updateFocusIfNeeded - never hit despite being in the backtrace
- shouldUpdateFocus - never hit
- enumeratePreferredFocusEnvironments - returned empty array and is hit, but it still loops and hangs app
iPad is on iOS 16.3