Add @try/@catch exception guards to iOS TurboModule bridge#422
Merged
Add @try/@catch exception guards to iOS TurboModule bridge#422
Conversation
Prevent NSExceptions from propagating to RCTTurboModule's performVoidMethodInvocation, which rethrows them as C++ exceptions causing std::terminate → SIGABRT on React Native New Architecture. - Void methods: catch and log via NSLog - Promise methods: catch and reject with QONBridgeException error code - Delegate callbacks: catch and log - dispatch_async blocks (NoCodes): guards placed inside the block Fixes: #421 Upstream RN bug: facebook/react-native#54859 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6a1b502 to
1729b2b
Compare
SpertsyanKM
approved these changes
Mar 6, 2026
Contributor
Author
Local verificationBuild: Code review notes
|
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
@try/@catchexception guards to all TurboModule bridge methods inRNQonversion.mmandRNNoCodes.mmRCTTurboModule.mm'sperformVoidMethodInvocation, which rethrows them as C++ exceptions causingstd::terminate→ SIGABRT on React Native New Architecturereject("QONBridgeException", ...)NSLogdispatch_asyncblocks (NoCodesshowScreen/close): guards placed inside the block to catch exceptions on the main queueFixes #421
Upstream RN bug: facebook/react-native#54859
Linear: DEV-637
Test plan
@throwin an impl method → verify crash is caught and logged, not fatalnewArchEnabled: true)newArchEnabled: false) — no regressions🤖 Generated with Claude Code