The jsEngine value in app config (app.json or app.config.js) is the single source to determine the JavaScript executor for your Expo app, but if you use the bare workflow for your project, please make sure the native project is set up with the following patches.
This configuration is automatic for projects initialized with SDK 43 and higher.
{
"expo.jsEngine": "hermes"
}--- a/ios/Podfile
+++ b/ios/Podfile
@@ -4,13 +4,16 @@ require File.join(File.dirname(`node --print "require.resolve('@react-native-com
platform :ios, '12.0'
+require 'json'
+podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}
+
target 'HelloWorld' do
use_expo_modules!
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
- :hermes_enabled => false
+ :hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes'
)
# Uncomment to opt-in to using FlipperDuring the "prebuild" stage for managed apps, config plugins will read jsEngine value in app config and replace expo.jsEngine value in ios/Podfile.properties.json. CocoaPods and Xcode will link with the specified JavaScript engine accordingly.
Both expo publish and expo export reference jsEngine value in app config. If the jsEngine set to "hermes", the generated JavaScript bundle will be a Hermes bytecode bundle.
For bare workflow apps, please ensure the jsEngine value is consistent between app config (app.json or app.config.js) and ios/Podfile.properties.json.