fix(ios): replace crash-causing RCTAssert with RCTLogWarn in touch handler#57696
Open
hryhoriiK97 wants to merge 1 commit into
Open
fix(ios): replace crash-causing RCTAssert with RCTLogWarn in touch handler#57696hryhoriiK97 wants to merge 1 commit into
hryhoriiK97 wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary:
On iOS 17+, UITextView's text selection gesture recognizer can deliver
touchesMoved:/touchesEnded:toRCTSurfaceTouchHandlerwithout a priortouchesBegan: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)returnsend(), and theRCTAssertfires — throwing anNSExceptionthat crashes the app in debug builds. The existingif (iterator == end) { continue; }guard already handles this case gracefully (and is the only code path exercised in release builds, whereRCTAssertis 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, 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 "Inconsistency between local and UIKit touch registries" in RCTSurfaceTouchHandler triggered by UITextView selection gestures on iOS 17+
Test Plan:
<TextInput>or a customUITextView-based Fabric componentNSException: "Inconsistency between local and UIKit touch registries""Inconsistency between local and UIKit touch registries"