Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Enable Hermes to work on iOS #29914

Closed
wants to merge 52 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
4c21abe
feat: initial commit Hermes on iOS
grabbou Sep 9, 2020
1f3598d
chore: update version
grabbou Sep 9, 2020
3aa3d95
Update gradlew.bat
grabbou Sep 9, 2020
52bc83a
chore: release script tweaks
grabbou Sep 14, 2020
11112f6
Remove .gitattributes and normalize line endings (#29792)
friederbluemle Sep 4, 2020
f7592b0
chore: update line endings after cherry-picking fix
grabbou Sep 14, 2020
6921e6b
Merge branch 'master' into feat/ios-hermes-try
grabbou Sep 14, 2020
4b0920b
chore: remove `hermes-binary.sh` file
grabbou Sep 15, 2020
cb01604
fix: bundling RNTester in release mode
grabbou Sep 15, 2020
942d009
chore: updating wording
grabbou Sep 15, 2020
52c8c2f
chore: do not force bundling, reverting previous changes meant for te…
grabbou Sep 15, 2020
6afacda
Revert "feat: improve monorepo support by removing redundant PROJECT_…
grabbou Sep 17, 2020
15a2b9c
fix: running RNTester and other apps in RELEASE
grabbou Sep 17, 2020
16452d0
fix folly errors
grabbou Oct 7, 2020
8c86ae7
chore: remove comment
grabbou Oct 7, 2020
e2b2968
feat: use CocoaPods hermes-engine instead of npm package
grabbou Oct 13, 2020
7310c8a
chore: remove all occurences of `hermes-engine-darwin`
grabbou Oct 23, 2020
c2adc84
chore: lock updates
grabbou Oct 23, 2020
bb6c456
chore: update comment on a wkroarund
grabbou Oct 23, 2020
a760438
Revert "Revert "feat: improve monorepo support by removing redundant …
grabbou Oct 23, 2020
31c782f
Fix Xcode bundler in staging and release (#29477)
Sep 22, 2020
0f73afb
feat: run Hermes from CocoaPods and automatically enable
grabbou Oct 23, 2020
278f33f
feat: warn about wrong path to Hermes CLI
grabbou Oct 26, 2020
62d5619
chore: remove extra args to Bundle JS and Assets phase
grabbou Oct 26, 2020
4fbb834
chore: revert some changes to xcodeproj
grabbou Oct 26, 2020
68f1c31
chore: temporary fix for running on a simulator in debug mode
grabbou Oct 26, 2020
3fe22f8
Merge branch 'master' into feat/ios-hermes-try
grabbou Oct 26, 2020
4183b20
chore: clean up after merge
grabbou Oct 26, 2020
fe7cbef
Invalidate cache
grabbou Oct 26, 2020
7fee493
chore: do not pull CP repo, its using CDN anyway
grabbou Oct 26, 2020
5f92caa
fix: upgrade CocoaPods to fix Xcode 12 and other issues
grabbou Oct 26, 2020
ec5f23b
invalidate the cache once again
grabbou Oct 26, 2020
82253cf
chore: use CocoaPods from Gemfile
grabbou Oct 29, 2020
a1da047
Merge branch 'feat/ios-hermes-try' of github.com:callstack/react-nati…
grabbou Oct 29, 2020
9aa5815
Merge branch 'master' into feat/ios-hermes-try
grabbou Oct 29, 2020
80142fb
chore: bump xcode to see if it helps
grabbou Oct 29, 2020
579d03f
chore: bump os
grabbou Oct 29, 2020
e08d0d0
fix: some unit tests
grabbou Oct 29, 2020
5351d68
fix: unit tests
grabbou Oct 30, 2020
48eeaa5
fix: build failure of libevent in use_frameworks mode
grabbou Oct 30, 2020
e131e10
fix: eslint issue
grabbou Oct 30, 2020
7379157
Revert changes to libevent for now
grabbou Oct 30, 2020
e1b79c0
Make libevent work for static and framework builds
alloy Oct 30, 2020
170838a
Merge pull request #26 from alloy/feat/ios-hermes-try
grabbou Nov 2, 2020
59a92a2
fix: flow issue in test
grabbou Nov 2, 2020
637a5a8
chore: point out to Hermes issue
grabbou Nov 2, 2020
9f924c0
feat: test jsc/hermes separate
grabbou Nov 2, 2020
2dff0ce
Merge branch 'master' into feat/ios-hermes-try
grabbou Nov 2, 2020
d26d900
chore: remove unused params
grabbou Nov 2, 2020
ff9d5ec
Merge branch 'feat/ios-hermes-try' of github.com:callstack/react-nati…
grabbou Nov 2, 2020
b400e6c
chore: small docs on enabling Hermes
grabbou Nov 2, 2020
9ec3e29
Update packages/rn-tester/Podfile
grabbou Nov 2, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
49 changes: 34 additions & 15 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ defaults: &defaults
- PUBLIC_ANALYSISBOT_GITHUB_TOKEN_A: &github_token_a "78a72af35445ca3f8180"
- PUBLIC_ANALYSISBOT_GITHUB_TOKEN_B: &github_token_b "b1a98e0bbd56ff1ccba1"


# -------------------------
# EXECUTORS
# -------------------------
Expand Down Expand Up @@ -152,13 +151,13 @@ commands:
command: cp packages/rn-tester/Podfile.lock packages/rn-tester/Podfile.lock.bak
- restore_cache:
keys:
- v1-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}
- v1-pods-{{ .Environment.CIRCLE_JOB }}-
- v3-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}
- v3-pods-{{ .Environment.CIRCLE_JOB }}-
- steps: << parameters.steps >>
- save_cache:
paths:
- packages/rn-tester/Pods
key: v1-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}
key: v3-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}

download_gradle_dependencies:
steps:
Expand Down Expand Up @@ -216,12 +215,12 @@ commands:
jobs:
setup:
parameters:
executor:
type: executor
default: nodelts
checkout_type:
type: string
default: node
executor:
type: executor
default: nodelts
checkout_type:
type: string
default: node
executor: << parameters.executor >>
steps:
- checkout
Expand Down Expand Up @@ -261,7 +260,6 @@ jobs:
DANGER_GITHUB_API_TOKEN="$PUBLIC_PULLBOT_GITHUB_TOKEN_A""$PUBLIC_PULLBOT_GITHUB_TOKEN_B" yarn danger ci --use-github-checks
when: always


# -------------------------
# JOBS: Analyze Code
# -------------------------
Expand Down Expand Up @@ -351,6 +349,9 @@ jobs:
use_frameworks:
type: boolean
default: false
use_hermes:
type: boolean
default: false
run_unit_tests:
description: Specifies whether unit tests should run.
type: boolean
Expand Down Expand Up @@ -407,6 +408,13 @@ jobs:
name: Set USE_FRAMEWORKS=1
command: echo "export USE_FRAMEWORKS=1" >> $BASH_ENV

- when:
condition: << parameters.use_hermes >>
steps:
- run:
name: Set USE_HERMES=1
command: echo "export USE_HERMES=1" >> $BASH_ENV

- run:
name: Setup the CocoaPods environment
command: pod setup
Expand Down Expand Up @@ -765,20 +773,31 @@ workflows:
requires:
- setup_android
- test_ios:
name: test_ios_unit
run_disabled_tests: false
name: test_ios_unit_jsc
run_unit_tests: true
requires:
- setup_ios
- test_ios:
name: test_ios_unit_frameworks_jsc
use_frameworks: true
run_unit_tests: true
requires:
- setup_ios
- test_ios:
name: test_ios_unit_hermes
use_hermes: true
run_unit_tests: true
requires:
- setup_ios
- test_ios:
name: test_ios_unit_frameworks
name: test_ios_unit_frameworks_hermes
use_hermes: true
use_frameworks: true
run_unit_tests: true
requires:
- setup_ios
# - test_ios:
# name: test_ios_detox
# run_disabled_tests: false
# run_detox_tests: true
# requires:
# - setup_ios
Expand Down
11 changes: 9 additions & 2 deletions IntegrationTests/GlobalEvalWithSourceUrlTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

'use strict';

import type {ExtendedError} from 'react-native/Libraries/Core/Devtools/parseErrorStack';

const React = require('react');
const ReactNative = require('react-native');
const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack');
Expand All @@ -31,7 +33,7 @@ class GlobalEvalWithSourceUrlTest extends React.Component<{...}> {
'Expected globalEvalWithSourceUrl(expression) to return a value',
);
}
let syntaxError;
let syntaxError: ?ExtendedError;
try {
global.globalEvalWithSourceUrl('{');
} catch (e) {
Expand All @@ -42,7 +44,12 @@ class GlobalEvalWithSourceUrlTest extends React.Component<{...}> {
'Expected globalEvalWithSourceUrl to throw on a syntax error',
);
}
if (!(syntaxError instanceof SyntaxError)) {
// Hermes throws an Error instead of a SyntaxError
// https://github.com/facebook/hermes/issues/400
if (
syntaxError.jsEngine !== 'hermes' &&
!(syntaxError instanceof SyntaxError)
) {
throw new Error(
'Expected globalEvalWithSourceUrl to throw SyntaxError on a syntax error',
);
Expand Down
4 changes: 2 additions & 2 deletions React-Core.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,14 @@ Pod::Spec.new do |s|
end

s.subspec "Hermes" do |ss|
ss.platforms = { :osx => "10.14" }
ss.platforms = { :osx => "10.14", :ios => "10.0" }
ss.source_files = "ReactCommon/hermes/executor/*.{cpp,h}",
"ReactCommon/hermes/inspector/*.{cpp,h}",
"ReactCommon/hermes/inspector/chrome/*.{cpp,h}",
"ReactCommon/hermes/inspector/detail/*.{cpp,h}"
ss.pod_target_xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => "HERMES_ENABLE_DEBUGGER=1" }
ss.dependency "RCT-Folly/Futures"
ss.dependency "hermes", "~> 0.6.0"
ss.dependency "hermes-engine"
grabbou marked this conversation as resolved.
Show resolved Hide resolved
end

s.subspec "DevSupport" do |ss|
Expand Down
2 changes: 1 addition & 1 deletion React/CxxBridge/RCTCxxBridge.mm
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
#import <jsireact/JSIExecutor.h>
#import <reactperflogger/BridgeNativeModulePerfLogger.h>

#if TARGET_OS_OSX && __has_include(<hermes/hermes.h>)
#if __has_include(<hermes/hermes.h>)
#define RCT_USE_HERMES 1
#endif
#if RCT_USE_HERMES
Expand Down
6 changes: 5 additions & 1 deletion packages/rn-tester/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@ if ENV['USE_FRAMEWORKS'] == '1'
use_frameworks!
end

if ENV['USE_HERMES'] == '1'
puts "Using Hermes engine"
end

def pods()
project 'RNTesterPods.xcodeproj'

# Enable TurboModule
prefix_path = "../.."
use_react_native!(path:prefix_path)
use_react_native!(path: prefix_path, hermes_enabled: ENV['USE_HERMES'] == '1')
pod 'ReactCommon/turbomodule/samples', :path => "#{prefix_path}/ReactCommon"

# Additional Pods which aren't included in the default Podfile
Expand Down
89 changes: 57 additions & 32 deletions packages/rn-tester/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ PODS:
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- glog (0.3.5)
- hermes-engine (0.7.1)
- libevent (2.1.11)
- OpenSSL-Universal (1.0.2.19):
- OpenSSL-Universal/Static (= 1.0.2.19)
- OpenSSL-Universal/Static (1.0.2.19)
Expand All @@ -70,6 +72,11 @@ PODS:
- boost-for-react-native
- DoubleConversion
- glog
- RCT-Folly/Futures (2020.01.13.00):
- boost-for-react-native
- DoubleConversion
- glog
- libevent
- RCTRequired (1000.0.0)
- RCTTypeSafety (1000.0.0):
- FBLazyVector (= 1000.0.0)
Expand Down Expand Up @@ -127,6 +134,16 @@ PODS:
- React-jsinspector (= 1000.0.0)
- React-perflogger (= 1000.0.0)
- Yoga
- React-Core/Hermes (1000.0.0):
- glog
- hermes-engine
- RCT-Folly (= 2020.01.13.00)
- RCT-Folly/Futures
- React-cxxreact (= 1000.0.0)
- React-jsi (= 1000.0.0)
- React-jsiexecutor (= 1000.0.0)
- React-perflogger (= 1000.0.0)
- Yoga
- React-Core/RCTActionSheetHeaders (1000.0.0):
- glog
- RCT-Folly (= 2020.01.13.00)
Expand Down Expand Up @@ -377,13 +394,16 @@ DEPENDENCIES:
- FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.54.0)
- FlipperKit/SKIOSNetworkPlugin (~> 0.54.0)
- glog (from `../../third-party-podspecs/glog.podspec`)
- hermes-engine
- libevent (from `../../third-party-podspecs/libevent.podspec`)
- RCT-Folly (from `../../third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../../Libraries/RCTRequired`)
- RCTTypeSafety (from `../../Libraries/TypeSafety`)
- React (from `../../`)
- React-callinvoker (from `../../ReactCommon/callinvoker`)
- React-Core (from `../../`)
- React-Core/DevSupport (from `../../`)
- React-Core/Hermes (from `../../`)
- React-Core/RCTWebSocket (from `../../`)
- React-CoreModules (from `../../React/CoreModules`)
- React-cxxreact (from `../../ReactCommon/cxxreact`)
Expand All @@ -408,7 +428,7 @@ DEPENDENCIES:
- Yoga (from `../../ReactCommon/yoga`)

SPEC REPOS:
trunk:
https://cdn.cocoapods.org/:
- boost-for-react-native
- CocoaAsyncSocket
- CocoaLibEvent
Expand All @@ -419,6 +439,7 @@ SPEC REPOS:
- Flipper-PeerTalk
- Flipper-RSocket
- FlipperKit
- hermes-engine
- OpenSSL-Universal
- YogaKit

Expand All @@ -431,6 +452,8 @@ EXTERNAL SOURCES:
:path: "../../Libraries/FBReactNativeSpec"
glog:
:podspec: "../../third-party-podspecs/glog.podspec"
libevent:
:podspec: "../../third-party-podspecs/libevent.podspec"
RCT-Folly:
:podspec: "../../third-party-podspecs/RCT-Folly.podspec"
RCTRequired:
Expand Down Expand Up @@ -488,46 +511,48 @@ SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
DoubleConversion: cde416483dac037923206447da6e1454df403714
FBLazyVector: fe973c09b2299b5e8154186ecf1f6554b4f70987
FBReactNativeSpec: 20a9345af9157362b51ab0258d842cb7bb347d19
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
FBLazyVector: 41b9b20a04ec7d992469c3c0100df42bd5bba9ba
FBReactNativeSpec: 1d4c3a5b3b08575ef17b566bfb41604adf854c7a
Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
Flipper-Folly: c12092ea368353b58e992843a990a3225d4533c3
Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7
FlipperKit: ab353d41aea8aae2ea6daaf813e67496642f3d7d
glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62
hermes-engine: 2d25059126292d4375a46b65704767b3b0f529aa
libevent: 867cc03e654415675bcacf9726871a37c4b56b8a
OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
RCT-Folly: b39288cedafe50da43317ec7d91bcc8cc0abbf33
RCTRequired: d3d4ce60e1e2282864d7560340690a3c8c646de1
RCTTypeSafety: 4da4f9f218727257c50fd3bf2683a06cdb4fede3
React: 87b3271d925336a94620915db5845c67c5dbbd77
React-callinvoker: e9524d75cf0b7ae108868f8d34c0b8d7dc08ec03
React-Core: f4eeb7ca3d6a7c2879d1d5b093800f23da9be617
React-CoreModules: 87f011fa87190ffe979e443ce578ec93ec6ff4d4
React-cxxreact: de6de17eac6bbaa4f9fad46b66e7f0c4aaaf863d
React-jsi: 790da16b69a61adc36829eed43c44187c1488d10
React-jsiexecutor: 17a3e26806bc19d8be7b6c83792bffc46df796be
React-jsinspector: 01db8cd098c7ab72bd09abdda522a08c9acd3af9
React-perflogger: 37913fce32026582ad0244b585d1e52652fd01c0
React-RCTActionSheet: e6562ea4df7099af4023d1bd0e9716e43b45a5c9
React-RCTAnimation: fc2f655a64f0791879ab03843cca90c53737d1cb
React-RCTBlob: 5f82467e5d3bef65d05cdd900df6e12b0849744a
React-RCTImage: f3a98834281555ce1bbbe1af0306aaf40ac70fc7
React-RCTLinking: 801d05ad5e6d1636e977f4dfeab21f87358a02a5
React-RCTNetwork: b5e2f27a098ca52d98426328640314a499da6d00
React-RCTPushNotification: ce60993f816f917a6495227e16978b5fd550d73b
React-RCTSettings: 3cb638230af06ba769edc0bc4ed4123040b1b4e2
React-RCTTest: 090e9816044220c39462be109dab6d473d94b1c9
React-RCTText: 51a41bf9d18a91b2437b833ed4246754baf830d0
React-RCTVibration: a1cce36dd452eb88296d99d80d66f2c5bd50aad4
React-runtimeexecutor: 53867815d0a01e53a2c901cb7f01076216c5c799
ReactCommon: d101410fc55088c91dc24595715c7b26ec760adf
Yoga: 69ef0b2bba5387523f793957a9f80dbd61e89631
RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c
RCTRequired: 08a7ff32dfcf3d2a0d5975d8936aa461e751c94f
RCTTypeSafety: 6c06b6212c260279dceadfb492cc071b6ccaa94b
React: 11446588a4415be9685faa772f51617aedd42c53
React-callinvoker: 91bb3d26e1bc03956a04f2fc4dfd18fa201c2116
React-Core: 7cf15c7da07872c4eddda7e60fc782b5c90c3ec4
React-CoreModules: fa38f1a0095cb23221f6e1ace508e002ab0859b5
React-cxxreact: aaf9d64527d2ce9beb3c80167adde72c79fbd1d9
React-jsi: e71179690ee4deb4bdb76f2e10023c22f0c0bafd
React-jsiexecutor: 260ee4bd8d0c5eab950d7222c88cdb71c4dd4a98
React-jsinspector: 1a013b2751ebe53792abfaa9967058248c5586a8
React-perflogger: 13cc0c550c30110ed2a661d081e649a9fb87cee8
React-RCTActionSheet: 8d7c7f5f5df20a60f92ac04dd43c14a444fad7b1
React-RCTAnimation: 153673bb315d67cbb5e107bc7fbdb07e67566690
React-RCTBlob: 92e03c3a61cda7e3d745a04eb792d564bcdb9b52
React-RCTImage: b7d345c55df0dd17b180e7f598a2db599d1a1dc7
React-RCTLinking: 711815a70272557f3740621c00e69ffef1131f50
React-RCTNetwork: 2fb0b1d61d12475b7decfbf728b8a4892f24efb6
React-RCTPushNotification: 7f1fcd788b630b0ffee8ea2d3de4ad0260b6301d
React-RCTSettings: 41eee0ff18d317265f2f401da66c0e4cbe1a026d
React-RCTTest: de5b8af1586d82622e95a6ddf04ca2c78579c655
React-RCTText: db9001d0d20425e5e50fe6d0a57ef4a8e8d1dc74
React-RCTVibration: 2059c6d5fa254390e1f3874c55d026b282ebd579
React-runtimeexecutor: 08bf2f4079793909fbece520244bc2b855607e36
ReactCommon: fbf1cc0fe30d2442614975cb59515c12069c2054
Yoga: 331a94ed76c4d00b4b5b0458296b8850c9b53ff2
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a

PODFILE CHECKSUM: 1d1cdc29892e8a27b768e0e7ce1ead435a53bf0c
PODFILE CHECKSUM: b7291ba95c2e06e414d49a93264f5ee198245f68

COCOAPODS: 1.10.0
2 changes: 1 addition & 1 deletion packages/rn-tester/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Before running the app, make sure you ran:
Both macOS and Xcode are required.
- `cd packages/rn-tester`
- Install [Bundler](https://bundler.io/): `gem install bundler`. We use bundler to install the right version of [CocoaPods](https://cocoapods.org/) locally.
- Install Bundler and CocoaPods dependencies: `bundle install && bundle exec pod install`
- Install Bundler and CocoaPods dependencies: `bundle install && bundle exec pod install`. In order to use Hermes engine instead of JSC, run: `USE_HERMES=1 bundle exec pod install` instead.
- Open the generated `RNTesterPods.xcworkspace`. This is not checked in, as it is generated by CocoaPods. Do not open `RNTesterPods.xcodeproj` directly.

### Running on Android
Expand Down
12 changes: 12 additions & 0 deletions packages/rn-tester/RNTester/AppDelegate.mm
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,15 @@

#import "AppDelegate.h"

#if __has_include(<hermes/hermes.h>)
#define RCT_USE_HERMES 1
#endif
#if RCT_USE_HERMES
#import <React/HermesExecutorFactory.h>
#else
#import <React/JSCExecutorFactory.h>
#endif

#import <React/RCTJSIExecutorRuntimeInstaller.h>
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
Expand Down Expand Up @@ -165,7 +173,11 @@ - (void)loadSourceForBridge:(RCTBridge *)bridge
#endif

__weak __typeof(self) weakSelf = self;
#if RCT_USE_HERMES
return std::make_unique<facebook::react::HermesExecutorFactory>(
#else
return std::make_unique<facebook::react::JSCExecutorFactory>(
#endif
facebook::react::RCTJSIExecutorRuntimeInstaller([weakSelf, bridge](facebook::jsi::Runtime &runtime) {
if (!bridge) {
return;
Expand Down