-
Notifications
You must be signed in to change notification settings - Fork 135
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
[RN][macos] Enable Hermes for RNTester #1308
[RN][macos] Enable Hermes for RNTester #1308
Conversation
Summary: **Context** On Core RN, Hermes for iOS can be enabled by setting a flag in the Podfile https://reactnative.dev/docs/hermes#ios | Since React Native 0.64, Hermes also runs on iOS. To enable Hermes for iOS, edit your ios/Podfile file and make the change illustrated below: ``` use_react_native!( :path => config[:reactNativePath], # to enable hermes on iOS, change `false` to `true` and then install pods # By default, Hermes is disabled on Old Architecture, and enabled on New Architecture. # You can enable/disable it manually by replacing `flags[:hermes_enabled]` with `true` or `false`. :hermes_enabled => true ) ``` In the RNTester Podfile, Hermes is enabled using envvar: https://github.com/facebook/react-native/blob/main/packages/rn-tester/Podfile#L27 ``` # Hermes is now enabled by default. # The following line will only disable Hermes if the USE_HERMES envvar is SET to a value other than 1 (e.g. USE_HERMES=0). hermes_enabled = !ENV.has_key?('USE_HERMES') || ENV['USE_HERMES'] == '1' ``` Build command: `USE_HERMES=1 bundle exec pod install` This will install the Hermes runtime Pod (not build it from scratch) & thus enable the `RCT_USE_HERMES` macro. https://www.internalfb.com/code/fbsource/[9f57823a75a40d3f8559c8f1b7ae0add8e95d6dc]/xplat/js/react-native-github/packages/rn-tester/RNTester/AppDelegate.mm?lines=10-16 --- The documentation for enabling Hermes on RN Desktop macOS are outdated: https://microsoft.github.io/react-native-windows/docs/hermes#hermes-on-macos > Install the npm package yarn add 'hermes-engine-darwin@^0.4.3' * `hermes-engine-darwin` is no longer required > Add (or uncomment) the following pod dependencies to your macOS target in your Podfile: pod 'React-Core/Hermes', :path => '../node_modules/react-native-macos/' pod 'hermes', :path => '../node_modules/hermes-engine-darwin' pod 'libevent', :podspec => '../node_modules/react-native-macos/third-party-podspecs/libevent.podspec' * Setting `USE_HERMES=1` during `pod install= replaces all of this > Copy Run pod install Be sure to set your target's deployment target to at least 10.14 before running pod install * `USE_HERMES=1 bundle exec pod install --verbose` --- On RN Desktop, the Hermes flag was [set to false](microsoft#780) due to M1 build reasons which have since been resolved. - microsoft#952 - microsoft#781 Curiously, the `RNTester-macOS` target AppDelegate was never updated to import & use Hermes when `RCT_USE_HERMES` was `true`. Only the `RNTester` for mobile had the correct Hermes usage. **RNTester-macOS:** https://github.com/microsoft/react-native-macos/blob/main/packages/rn-tester/RNTester-macOS/AppDelegate.mm **RNTester:** https://github.com/microsoft/react-native-macos/blob/main/packages/rn-tester/RNTester/AppDelegate.mm **Change** * Remove `pods(:hermes_enabled => true)` in favor of passing `USE_HERMES=1` to `pod install` (This is how it's done on RNTester iOS) * Copy Hermes support to `RNTester-macOS` AppDelegate Test Plan: **Install from scratch** Differential Revision: https://phabricator.intern.facebook.com/D38277077
Just to be clear, this change brings the RNTester-macOS target back into parity with RN Core and our own RNTester target where enabling and disabling Hermes is as simple as a flag in the pod file? And from the looks of it, keeps it off by default? |
Yes, we don't have plans on enabling by default (which is what happens now on RN). However, we would like to enable it during development so we can connect & debug using flipper. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks good from me. I'll have @amgleitman give it a second look if he likes since he was involved with merging the changes from RN Core that included Hermes stuff.
Awesome change! |
I'll go ahead and merge this. |
If you want to try this out on an M1/M2/... MacBook you need to run
|
The latest version of cocoapods from homebrew should have m1 support? I don't think you need the "arch -x86_64" bit anymore |
Ooh! chpurrer@chpurrer-mbp rn-tester % pod --version |
Latest I found.. looks like you have to use homebrew? https://stackoverflow.com/a/65334677 |
Please select one of the following
Summary
On RN Core, Hermes for iOS can be enabled by setting a flag in the Podfile & running
pod install
https://reactnative.dev/docs/hermes#ios
In Core RNTester for iOS,
Hermes is enabled by defaultNot until 0.70 - https://github.com/facebook/react-native/blob/0.70-stable/scripts/react_native_pods.rb#L41
This will build & install the Hermes runtime & enable the
RCT_USE_HERMES
macro.https://github.com/microsoft/react-native-macos/blob/main/packages/rn-tester/RNTester/AppDelegate.mm#L10-L16
In 0.69 Hermes is disabled by default - https://github.com/facebook/react-native/blob/0.69-stable/scripts/react_native_pods.rb#L31
On RN Desktop, the Hermes flag was disabled #780 due to M1 build reasons which have since been resolved. #952 #781
Curiously, the
RNTester-macOS
target AppDelegate was never updated to use Hermes once the Pod was added.Only the
RNTester
target for mobile had the correct Hermes usage.RNTester-macOS: https://github.com/microsoft/react-native-macos/blob/main/packages/rn-tester/RNTester-macOS/AppDelegate.mm
RNTester: https://github.com/microsoft/react-native-macos/blob/main/packages/rn-tester/RNTester/AppDelegate.mm
This change will not enable Hermes by default on RNTester. Pass
USE_HERMES=1
topod install
to enable.The documentation for enabling Hermes on RN Desktop macOS can be simplified now.
https://microsoft.github.io/react-native-windows/docs/hermes#hermes-on-macos
hermes-engine-darwin
is no longer published/required rn-macos's Hermes support: RNTester on 0.64 & 0.66 #952:hermes_enabled => true
in Podfile should do all of the above.Changelog
[macOS] [pod] Copy Hermes support to
RNTester-macOS
AppDelegate[macOS] [pod] Remove
pods(:hermes_enabled => true)
in favor of using envvarUSE_HERMES=1
duringpod install
.Test Plan
RNTester with Hermes enabled:
hermesworkingrntestermed.mp4