From 294b1f5b053b6fa41dfb58c82fe4753acef06ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Kwas=CC=81niewski?= Date: Fri, 21 Feb 2025 09:54:52 +0100 Subject: [PATCH] feat: initial version of the docs --- README.md | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 103 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 79aa402..05806cf 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,115 @@ _Note: JavaScriptCore has been extracted from core react-native as a part of [Le ## Installation -// TODO +> [!IMPORTANT] +> This library only supports React Native 0.79 and above with new architecture enabled. + +```sh +yarn add @react-native-community/javascriptcore +``` + +### iOS + +Install pods: + +```sh +cd ios && USE_THIRD_PARTY_JSC=1 USE_HERMES=0 bundle exec pod install +``` +> [!NOTE] +> Note: `USE_THIRD_PARTY_JSC=1` is required to use JavaScriptCore from this package until JavaScriptCore is removed from core react-native. + +### Android + +Add the following to your `android/gradle.properties`: + +```properties +# Disable Hermes +hermesEnabled=false + +# Enable third-party JSC +useThirdPartyJSC=true +``` ## Usage -// TODO +### iOS + +Open AppDelegate.swift and overwrite `createJSRuntimeFactory` method: + +```swift +import React +import React_RCTAppDelegate +import ReactAppDependencyProvider +import UIKit +import RCTRuntime + +// AppDelegate code + +class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { + override func sourceURL(for bridge: RCTBridge) -> URL? { + self.bundleURL() + } + + override func bundleURL() -> URL? { + #if DEBUG + RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") + #else + Bundle.main.url(forResource: "main", withExtension: "jsbundle") + #endif + } + + override func createJSRuntimeFactory() -> JSRuntimeFactory { + jsrt_create_jsc_factory() // Use JavaScriptCore runtime + } +} +``` + +### Android + +Open `MainApplication.java` and overwrite `getJavaScriptExecutorFactory` method: + +```java +import io.github.reactnativecommunity.javascriptcore.JSCExecutorFactory +import io.github.reactnativecommunity.javascriptcore.JSCRuntimeFactory + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = + object : DefaultReactNativeHost(this) { + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + } + + override fun getJSMainModuleName(): String = "index" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + + override fun getJavaScriptExecutorFactory(): JavaScriptExecutorFactory = + JSCExecutorFactory(packageName, AndroidInfoHelpers.getFriendlyDeviceName()) + } + + override val reactHost: ReactHost + get() = getDefaultReactHost(applicationContext, reactNativeHost, JSCRuntimeFactory()) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, OpenSourceMergedSoMapping) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + } +} +``` ## Maintainers -// TODO +This library is maintained by [Callstack](https://callstack.com/) a Total Software Engineering Consultancy that transforms organizations and teams through transformative apps. ## License