diff --git a/README.md b/README.md index b012ace..6efa21f 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ [![npm downloads](https://img.shields.io/npm/dm/@callstack/react-native-sandbox.svg?style=for-the-badge)](https://www.npmjs.org/package/@callstack/react-native-sandbox) [![check](https://img.shields.io/github/actions/workflow/status/callstackincubator/react-native-sandbox/check.yml?style=for-the-badge)](https://github.com/callstackincubator/react-native-sandbox/actions/workflows/check.yml) [![platform: iOS](https://img.shields.io/badge/platform-iOS-blue.svg?style=for-the-badge)](https://img.shields.io/badge/platform-iOS-blue.svg) +[![react-native >= 0.78](https://img.shields.io/badge/react--native-%3E%3D%200.78-61dafb.svg?style=for-the-badge&logo=react)](https://reactnative.dev/) + diff --git a/apps/demo/android/app/src/main/java/com/demo/MainApplication.kt b/apps/demo/android/app/src/main/java/com/demo/MainApplication.kt index 4258749..5cb06ef 100644 --- a/apps/demo/android/app/src/main/java/com/demo/MainApplication.kt +++ b/apps/demo/android/app/src/main/java/com/demo/MainApplication.kt @@ -4,11 +4,13 @@ import android.app.Application import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.soloader.OpenSourceMergedSoMapping +import com.facebook.soloader.SoLoader class MainApplication : Application(), ReactApplication { @@ -33,6 +35,9 @@ class MainApplication : Application(), ReactApplication { override fun onCreate() { super.onCreate() - loadReactNative(this) + SoLoader.init(this, OpenSourceMergedSoMapping) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + load() + } } } diff --git a/apps/demo/android/build.gradle b/apps/demo/android/build.gradle index b4f3ad9..9766946 100644 --- a/apps/demo/android/build.gradle +++ b/apps/demo/android/build.gradle @@ -5,7 +5,7 @@ buildscript { compileSdkVersion = 35 targetSdkVersion = 35 ndkVersion = "27.1.12297006" - kotlinVersion = "2.1.20" + kotlinVersion = "2.0.21" } repositories { google() diff --git a/apps/demo/android/gradle/wrapper/gradle-wrapper.properties b/apps/demo/android/gradle/wrapper/gradle-wrapper.properties index 002b867..e0fd020 100644 --- a/apps/demo/android/gradle/wrapper/gradle-wrapper.properties +++ b/apps/demo/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/apps/demo/ios/Demo/AppDelegate.swift b/apps/demo/ios/Demo/AppDelegate.swift index cc6bf9d..57af439 100644 --- a/apps/demo/ios/Demo/AppDelegate.swift +++ b/apps/demo/ios/Demo/AppDelegate.swift @@ -4,36 +4,15 @@ import React_RCTAppDelegate import ReactAppDependencyProvider @main -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? +class AppDelegate: RCTAppDelegate { + override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + self.moduleName = "Demo" + self.dependencyProvider = RCTAppDependencyProvider() + self.initialProps = [:] - var reactNativeDelegate: ReactNativeDelegate? - var reactNativeFactory: RCTReactNativeFactory? - - func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil - ) -> Bool { - let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) - delegate.dependencyProvider = RCTAppDependencyProvider() - - reactNativeDelegate = delegate - reactNativeFactory = factory - - window = UIWindow(frame: UIScreen.main.bounds) - - factory.startReactNative( - withModuleName: "Demo", - in: window, - launchOptions: launchOptions - ) - - return true + return super.application(application, didFinishLaunchingWithOptions: launchOptions) } -} -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { override func sourceURL(for bridge: RCTBridge) -> URL? { self.bundleURL() } diff --git a/apps/demo/ios/Podfile.lock b/apps/demo/ios/Podfile.lock index 764b717..59a1754 100644 --- a/apps/demo/ios/Podfile.lock +++ b/apps/demo/ios/Podfile.lock @@ -2019,7 +2019,7 @@ PODS: - React-timing - React-utils - SocketRocket - - React-Sandbox (0.4.0): + - React-Sandbox (0.4.1): - boost - DoubleConversion - fast_float @@ -2451,7 +2451,7 @@ SPEC CHECKSUMS: React-runtimeexecutor: 17c70842d5e611130cb66f91e247bc4a609c3508 React-RuntimeHermes: 3c88e6e1ea7ea0899dcffc77c10d61ea46688cfd React-runtimescheduler: 024500621c7c93d65371498abb4ee26d34f5d47d - React-Sandbox: e3cf3c955559ed9f0bf014b29dce1e94600cd790 + React-Sandbox: 9c091813e335735668c62b2d3dbeb1456f93d8a5 React-timing: c3c923df2b86194e1682e01167717481232f1dc7 React-utils: 9154a037543147e1c24098f1a48fc8472602c092 ReactAppDependencyProvider: afd905e84ee36e1678016ae04d7370c75ed539be diff --git a/bun.lock b/bun.lock index 2ea6ff6..202ced1 100644 --- a/bun.lock +++ b/bun.lock @@ -178,14 +178,14 @@ }, "packages/react-native-sandbox": { "name": "@callstack/react-native-sandbox", - "version": "0.4.0", + "version": "0.4.1", "devDependencies": { "react": "19.1.0", "react-native": "0.80.1", }, "peerDependencies": { - "react": "*", - "react-native": "*", + "react": ">=19.0.0", + "react-native": ">=0.78.0", }, }, }, diff --git a/packages/react-native-sandbox/README.md b/packages/react-native-sandbox/README.md index 385ec67..4ef697d 100644 --- a/packages/react-native-sandbox/README.md +++ b/packages/react-native-sandbox/README.md @@ -7,6 +7,13 @@ This is the **developer documentation** for installing and using `@callstack/react-native-sandbox` in your React Native application. +## Requirements + +- **React Native >= 0.78** +- **New Architecture** (Fabric) enabled + +This library uses `RCTReactNativeFactory`, C++ TurboModules, and Fabric component APIs that are only available starting from React Native 0.78. It does not include an Old Architecture / Bridge fallback. + ## 📦 Installation ### npm/yarn diff --git a/packages/react-native-sandbox/package.json b/packages/react-native-sandbox/package.json index ae4170c..b426ccd 100644 --- a/packages/react-native-sandbox/package.json +++ b/packages/react-native-sandbox/package.json @@ -44,8 +44,8 @@ ] }, "peerDependencies": { - "react": "*", - "react-native": "*" + "react": ">=19.0.0", + "react-native": ">=0.78.0" }, "devDependencies": { "react": "19.1.0",