iOS Fabric: first tap on a Touchable is lost while keyboard is open — regression between 2.2.12 and 2.4.21, still present in 2.11.0
Description
On a real device (iPhone 14 Pro, iOS 26.3.1, RN 0.81.x, New Architecture/Fabric), after using the app for a while, the first tap on a TouchableOpacity (send button) next to a focused multiline TextInput is silently consumed while the software keyboard is open: the keyboard closes, but the button's Pressability never fires (onPressIn/onPress are not reached). The second tap works. The Skia canvas lives on a different screen — the symptom occurs on a screen with no canvas mounted, after the canvas screen was used earlier in the session.
Bisection (device A/B, each configuration soak-tested with prolonged real usage)
| Configuration | Result |
|---|---|
| App @ commit before Skia upgrade (Skia 2.2.12) | no repro |
Same commit + only @shopify/react-native-skia 2.2.12 → 2.4.21 |
repro |
| Latest app + Skia 2.11.0 (latest) | repro |
| Latest app + Skia pinned to 2.2.12 | no repro |
Downgrading react-native 0.81.6 → 0.81.5 did not help, so it does not look RN-version specific.
Notes
- Diffing the package's
apple/andcpp/sources between 2.2.12 and 2.4.21 shows no touch/gesture/recognizer changes, so we suspect a rendering/threading timing change surfaces a React Native Fabric responder negotiation issue rather than a direct touch-handling bug. - During diagnosis we observed the JS ResponderEventPlugin's
trackedTouchCountbeing left at 1 after a batchedtopTouchCancel: twotopTouchStartevents followed by a singletopTouchCancelwhosenativeEvent.touches.lengthis 0 (the plugin decrements only once per cancel event). After that,topSelectionChangelets the focused TextInput become responder, and the next tap on the button is never granted the responder. - Environment: react-native 0.81.5/0.81.6, react-native-gesture-handler ~2.28, react-native-reanimated ~4.1, react-native-worklets 0.5.1–0.7.4, react-native-keyboard-controller ^1.21.7, Expo SDK 54,
newArchEnabled: true.
We don't have a minimal reproduction yet (it needs prolonged usage to trigger), but we can provide more details or run instrumented builds if helpful.
Source: Shopify/react-native-skia