Commit 433e79d
fix(ios): replace crash-causing RCTAssert with RCTLogWarn in touch handler (#57696)
Summary:
On iOS 17+, UITextView's text selection gesture recognizer can deliver `touchesMoved:`/`touchesEnded:` to `RCTSurfaceTouchHandler` without a prior `touchesBegan:` for the same touch. This happens because UIKit's internal selection gesture claims the touch begin exclusively and only forwards subsequent phases to sibling gesture recognizers.
When this occurs, `_activeTouches.find(touch)` returns `end()`, and the `RCTAssert` fires, throwing an `NSException` that crashes the app in debug builds. The existing `if (iterator == end) { continue; }` guard already handles this case gracefully (and is the only code path exercised in release builds, where `RCTAssert` is a no-op).
This PR downgrades the assertion to `RCTLogWarn`, preserving the diagnostic signal while eliminating the debug-only crash.
This issue was discovered while investigating text selection crashes in [react-native-enriched-markdown](https://github.com/nicolo-ribaudo/react-native-enriched-markdown), where a custom `UITextView`-based Fabric component with rich text formatting (headings, paragraphs) consistently triggers the assertion during normal selection gestures.
## Changelog:
[iOS] [Fixed] - Fix debug-only crash in RCTSurfaceTouchHandler from UITextView text-selection gestures on iOS 17+
Pull Request resolved: #57696
Test Plan:
1. Create a React Native app with a multiline `<TextInput>` or a custom `UITextView`-based Fabric component
2. On iOS 17+ simulator or device, in a **debug** build:
- Tap to place the cursor in a text block
- Attempt to select text by long-pressing and dragging to a different paragraph
3. **Before this fix**: App crashes with `NSException: "Inconsistency between local and UIKit touch registries"`
4. **After this fix**: Selection works normally. A warning is logged to the console: `"Inconsistency between local and UIKit touch registries"`
5. Verified that release builds are unaffected (RCTAssert was already a no-op in release)
Reviewed By: javache
Differential Revision: D113753196
Pulled By: fabriziocucci
fbshipit-source-id: d4cb867818f88c4f111628d115c6be98b257f09c1 parent 3e24033 commit 433e79d
1 file changed
Lines changed: 4 additions & 3 deletions
Lines changed: 4 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| |||
206 | 207 | | |
207 | 208 | | |
208 | 209 | | |
209 | | - | |
210 | 210 | | |
| 211 | + | |
211 | 212 | | |
212 | 213 | | |
213 | 214 | | |
| |||
219 | 220 | | |
220 | 221 | | |
221 | 222 | | |
222 | | - | |
223 | 223 | | |
| 224 | + | |
224 | 225 | | |
225 | 226 | | |
226 | 227 | | |
| |||
236 | 237 | | |
237 | 238 | | |
238 | 239 | | |
239 | | - | |
240 | 240 | | |
| 241 | + | |
241 | 242 | | |
242 | 243 | | |
243 | 244 | | |
| |||
0 commit comments