Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -521,25 +521,25 @@ parameters:
# Update Manually these versions below in order to hard overwrite the caches
node_modules_cache_key:
type: string
default: v29-node_modules-{{ checksum ".manifests/node_modules" }}
default: v30-node_modules-{{ checksum ".manifests/node_modules" }}
gems_cache_key:
type: string
default: v13-gems-{{ checksum "Gemfile.lock" }}-{{ arch }}
default: v14-gems-{{ checksum "Gemfile.lock" }}-{{ arch }}
cocoapods_cache_key:
type: string
default: v31-pods-{{ checksum ".manifests/cocoapods" }}
default: v32-pods-{{ checksum ".manifests/cocoapods" }}
app_build_ios_cache_key:
type: string
default: v30-app_build_ios-{{ checksum ".manifests/app_build" }}
default: v31-app_build_ios-{{ checksum ".manifests/app_build" }}
app_build_android_cache_key:
type: string
default: v16-app_build_android-{{ checksum ".manifests/app_build" }}
default: v17-app_build_android-{{ checksum ".manifests/app_build" }}
ios_native_code_cache_prefix:
type: string
default: v20-test-success
default: v21-test-success
android_native_cache_key:
type: string
default: v20-test-success-{{ checksum ".manifests/android_native" }}
default: v21-test-success-{{ checksum ".manifests/android_native" }}

workflows:
nightly:
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/setup-android-environment/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ runs:
uses: actions/cache@v4
with:
path: android/.gradle
key: gradle-project-v1-${{ runner.os }}-${{ hashFiles('android/gradle/wrapper/gradle-wrapper.properties', 'android/build.gradle', 'android/app/build.gradle') }}
key: gradle-project-v2-${{ runner.os }}-${{ hashFiles('android/gradle/wrapper/gradle-wrapper.properties', 'android/build.gradle', 'android/app/build.gradle') }}
restore-keys: |
gradle-project-v1-${{ runner.os }}-
gradle-project-v2-${{ runner.os }}-
- name: Download fonts from s3
run: ./scripts/setup/download-fonts
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/setup-ios-environment/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ runs:
path: |
ios/Pods
~/Library/Caches/CocoaPods
key: pods-v2-${{ runner.os }}-${{ hashFiles('**/Podfile.lock') }}
key: pods-v3-${{ runner.os }}-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
pods-v2-${{ runner.os }}-
pods-v3-${{ runner.os }}-
- name: Download fonts from s3
run: ./scripts/setup/download-fonts
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/setup-javascript-environment/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ runs:
uses: actions/cache@v4
with:
path: .yarn/cache
key: yarn-v4-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
key: yarn-v5-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
restore-keys: |
yarn-v4-${{ runner.os }}-
yarn-v5-${{ runner.os }}-
- name: Install Node.js dependencies
run: yarn install --immutable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
diff --git a/android/src/main/java/com/segmentanalyticsreactnative/AnalyticsReactNativeModule.kt b/android/src/main/java/com/segmentanalyticsreactnative/AnalyticsReactNativeModule.kt
index 3cf9c4604c86e334d59cb683c1998b0213bbb929..c6901ee8c26508fe8b63fbac49f57d887a08b6d8 100644
--- a/android/src/main/java/com/segmentanalyticsreactnative/AnalyticsReactNativeModule.kt
+++ b/android/src/main/java/com/segmentanalyticsreactnative/AnalyticsReactNativeModule.kt
@@ -217,11 +217,9 @@ class AnalyticsReactNativeModule : ReactContextBaseJavaModule, ActivityEventList
}

Log.d(name, "Sending Deeplink data to store: uri=${uri}, referrer=${referrer}")
- val sovran = (reactApplicationContext.currentActivity?.application as ReactApplication)
- ?.reactNativeHost
- ?.reactInstanceManager
- ?.currentReactContext
- ?.getNativeModule(SovranModule::class.java)
+ // Use reactApplicationContext directly to avoid getReactNativeHost() which throws
+ // in React Native New Architecture (RN 0.83+).
+ val sovran = reactApplicationContext.getNativeModule(SovranModule::class.java)
sovran?.dispatch("add-deepLink-data", properties)


Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
diff --git a/android/src/main/java/expo/modules/updates/errorrecovery/ErrorRecovery.kt b/android/src/main/java/expo/modules/updates/errorrecovery/ErrorRecovery.kt
index d87a9ffa40fc3d1e6e31c05badced146fb968295..dc9635734bf4dcf202c15f7a118ae6c0e34bb249 100644
index c216e1cfaff3b6c0bcae4f0fd68f02cadac7aabd..702735099c49f811caae7f71ce9291f9f6c7104a 100644
--- a/android/src/main/java/expo/modules/updates/errorrecovery/ErrorRecovery.kt
+++ b/android/src/main/java/expo/modules/updates/errorrecovery/ErrorRecovery.kt
@@ -36,6 +36,7 @@ class ErrorRecovery(
private var weakDevSupportManager: WeakReference<DevSupportManager>? = null
private var previousExceptionHandler: DefaultJSExceptionHandler? = null
@@ -29,6 +29,7 @@ class ErrorRecovery(
internal lateinit var handler: Handler

private var shouldHandleReactInstanceException = false
+ private var previousBridgelessExceptionHandler: ((Exception) -> Unit)? = null

fun initialize(delegate: ErrorRecoveryDelegate) {
if (!::handler.isInitialized) {
@@ -56,6 +57,13 @@ class ErrorRecovery(
@@ -49,6 +50,13 @@ class ErrorRecovery(
internal fun onReactInstanceException(exception: Exception) {
if (shouldHandleReactInstanceException) {
handleException(exception)
Expand All @@ -23,25 +23,21 @@ index d87a9ffa40fc3d1e6e31c05badced146fb968295..dc9635734bf4dcf202c15f7a118ae6c0
+ }
}
}
@@ -107,6 +115,10 @@ class ErrorRecovery(
private fun registerErrorHandlerImplBridgeless() {

@@ -92,9 +100,16 @@ class ErrorRecovery(

private fun registerErrorHandler(devSupportManager: DevSupportManager) {
shouldHandleReactInstanceException = true
+ // PATCHED: Store the current default uncaught exception handler as fallback
+ previousBridgelessExceptionHandler = { exception ->
+ Thread.getDefaultUncaughtExceptionHandler()?.uncaughtException(Thread.currentThread(), exception)
+ }
}

private fun registerErrorHandlerImplBridge(devSupportManager: DevSupportManager) {
@@ -137,6 +149,9 @@ class ErrorRecovery(

private fun unregisterErrorHandlerImplBridgeless() {

private fun unregisterErrorHandler() {
shouldHandleReactInstanceException = false
+ // PATCHED: Do NOT clear previousBridgelessExceptionHandler
+ // Keep it active so crashes after 10s are still passed to the fallback handler
+ // instead of being silently ignored. This is the core fix for the Bridgeless crash issue.
}

private fun unregisterErrorHandlerImplBridge() {
}
89 changes: 0 additions & 89 deletions .yarn/patches/react-native-npm-0.81.5-d8232ef145.patch

This file was deleted.

28 changes: 28 additions & 0 deletions .yarn/patches/react-native-npm-0.83.6-d8232ef145.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
diff --git a/React/Modules/RCTEventEmitter.m b/React/Modules/RCTEventEmitter.m
index 6cdec32f68bc0d2f3bc359ddea774078ce2934f8..8f7cf706cdd1b633c2154cd0f1861bf6f359da99 100644
--- a/React/Modules/RCTEventEmitter.m
+++ b/React/Modules/RCTEventEmitter.m
@@ -89,6 +89,10 @@

if (_listenerCount > 0) {
[self stopObserving];
+ // Reset listener count to allow proper re-initialization on bridge reload
+ // This is necessary for modules that persist across bridge reloads (singletons, dev reload, Expo Updates)
+ // Without this reset, startObserving will never be called again because _listenerCount > 1
+ _listenerCount = 0;
}
}

diff --git a/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h
index b4924ba5601c66b40f605a75269bef538cc231f4..c9a0d5e4f4e6f0e6a7b5c1f8e0d5e4f4e6f0e6a7 100644
--- a/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h
+++ b/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h
@@ -290,7 +290,7 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
}

bool preventShadowTreeCommitExhaustion() override {
- return false;
+ return true;
}

bool shouldPressibilityUseW3CPointerEventsForHover() override {
Loading
Loading