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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RN][macos] Enable Hermes for RNTester #1308

Merged
merged 1 commit into from
Aug 2, 2022

Commits on Jul 29, 2022

  1. [RN][macos] Enable Hermes for RNTester

    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
    Shawn Dempsey committed Jul 29, 2022
    Configuration menu
    Copy the full SHA
    add9a04 View commit details
    Browse the repository at this point in the history