Skip to content

react-native-community/javascriptcore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

React Native JavaScriptCore

Opt-in to use JavaScriptCore runtime in React Native.

Note: JavaScriptCore has been extracted from core react-native as a part of Lean Core JSC RFC.

Installation

Important

This library only supports React Native 0.79 and above with new architecture enabled.

yarn add @react-native-community/javascriptcore

iOS

Install pods:

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:

# Disable Hermes hermesEnabled=false # Enable third-party JSC useThirdPartyJSC=true

Usage

iOS

Open AppDelegate.swift and overwrite createJSRuntimeFactory method:

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:

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<ReactPackage> = 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

This library is maintained by Callstack a Total Software Engineering Consultancy that transforms organizations and teams through transformative apps.

License

Everything inside this repository is MIT licensed.

About

JavaScriptCore for React Native

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 7