fix: implement RCTAppearanceProxy#2729
Merged
Saadnajmi merged 4 commits intomicrosoft:mainfrom Oct 14, 2025
Merged
Conversation
Collaborator
Author
tido64
approved these changes
Oct 14, 2025
Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com>
Saadnajmi
added a commit
to Saadnajmi/react-native-macos
that referenced
this pull request
Nov 14, 2025
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:
React Native primarily runs on 2 threads: the UI thread (main thread for apple) and the JS thread (where the Javascript engine is running). This poses a challenge when JS synchronously wants a value that can only be accessed on the main thread (
getColorScheme()is the issue in this case).React Native upstream solves this via proxy objects (all initialized in
RCTInitializeUIKitProxies()called on RN instance startup) that set an initial value, and then guard reading / setting updated values of the main-thead-only values we want.Lets implement that for NSAppearance so we can fix a bunch of main thread violations we've been seeing on boot. I chose not to ifdef
RCTTraitCollectionProxybecause the names are quite different.. althought that would be the right file.Test Plan:
No main thread checker violations on RNTester boot.