From 5f536be2d8d548c38535f1b6c0660ecb71520e7d Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Mon, 30 Jan 2023 04:25:26 -0800 Subject: [PATCH] Restore Dynamic framework with Hermes in the Old Architecture Summary: I discovered that 0.69 could run React Native as Dynamic framework with Hermes and starting from 0.70 that's not possible anymore. This diff restore that possibility. Notice that now Hermes provisdes JSI and Dynamic Frameworks requires that all the dependencies are explicitly defined, therefore, whenever we have a pod that depended on `React-jsi`, now it also has to explicitly depends on `hermes-engine` ## Changelog [iOS][Fixed] - Add Back dynamic framework support for the Old Architecture with Hermes Reviewed By: cortinico Differential Revision: D42829728 fbshipit-source-id: a660e3b1e346ec6cf3ceb8771dd8bceb0dbcb13a --- Libraries/Blob/React-RCTBlob.podspec | 4 ++++ React-Core.podspec | 23 ++++++++++++++----- ReactCommon/ReactCommon.podspec | 8 ++++++- ReactCommon/cxxreact/React-cxxreact.podspec | 4 ++++ ReactCommon/hermes/React-hermes.podspec | 1 + .../jsiexecutor/React-jsiexecutor.podspec | 4 ++++ 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Libraries/Blob/React-RCTBlob.podspec b/Libraries/Blob/React-RCTBlob.podspec index 30cf7e14171..b827a9502d2 100644 --- a/Libraries/Blob/React-RCTBlob.podspec +++ b/Libraries/Blob/React-RCTBlob.podspec @@ -45,4 +45,8 @@ Pod::Spec.new do |s| s.dependency "React-Core/RCTBlobHeaders", version s.dependency "React-Core/RCTWebSocket", version s.dependency "React-RCTNetwork", version + + if ENV["USE_HERMES"] == nil || ENV["USE_HERMES"] == "1" + s.dependency "hermes-engine" + end end diff --git a/React-Core.podspec b/React-Core.podspec index 7981c580371..d21b50fc8c1 100644 --- a/React-Core.podspec +++ b/React-Core.podspec @@ -75,12 +75,20 @@ Pod::Spec.new do |s| s.subspec "Default" do |ss| ss.source_files = "React/**/*.{c,h,m,mm,S,cpp}" - ss.exclude_files = "React/CoreModules/**/*", - "React/DevSupport/**/*", - "React/Fabric/**/*", - "React/FBReactNativeSpec/**/*", - "React/Tests/**/*", - "React/Inspector/**/*" + exclude_files = [ + "React/CoreModules/**/*", + "React/DevSupport/**/*", + "React/Fabric/**/*", + "React/FBReactNativeSpec/**/*", + "React/Tests/**/*", + "React/Inspector/**/*" + ] + # If we are using Hermes (the default is use hermes, so USE_HERMES can be nil), we don't have jsc installed + # So we have to exclude the JSCExecutorFactory + if ENV['USE_HERMES'] == nil || ENV['USE_HERMES'] == "1" + exclude_files = exclude_files.append("React/CxxBridge/JSCExecutorFactory.{h,mm}") + end + ss.exclude_files = exclude_files ss.private_header_files = "React/Cxx*/*.h" end @@ -117,5 +125,8 @@ Pod::Spec.new do |s| if ENV['USE_HERMES'] == "0" s.dependency 'React-jsc' + else + s.dependency 'React-hermes' + s.dependency 'hermes-engine' end end diff --git a/ReactCommon/ReactCommon.podspec b/ReactCommon/ReactCommon.podspec index 64d418a246e..0d9792abc41 100644 --- a/ReactCommon/ReactCommon.podspec +++ b/ReactCommon/ReactCommon.podspec @@ -19,7 +19,7 @@ end folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-gnu-zero-variadic-macro-arguments' folly_version = '2021.07.22.00' boost_compiler_flags = '-Wno-documentation' - +using_hermes = ENV['USE_HERMES'] == nil || ENV['USE_HERMES'] == "1" Pod::Spec.new do |s| s.name = "ReactCommon" s.module_name = "ReactCommon" @@ -49,6 +49,9 @@ Pod::Spec.new do |s| s.dependency "React-logger", version ss.dependency "DoubleConversion" ss.dependency "glog" + if using_hermes + ss.dependency "hermes-engine" + end ss.subspec "bridging" do |sss| sss.dependency "React-jsi", version @@ -56,6 +59,9 @@ Pod::Spec.new do |s| sss.exclude_files = "react/bridging/tests" sss.header_dir = "react/bridging" sss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\"" } + if using_hermes + sss.dependency "hermes-engine" + end end ss.subspec "core" do |sss| diff --git a/ReactCommon/cxxreact/React-cxxreact.podspec b/ReactCommon/cxxreact/React-cxxreact.podspec index 8888f854733..33910c93eb4 100644 --- a/ReactCommon/cxxreact/React-cxxreact.podspec +++ b/ReactCommon/cxxreact/React-cxxreact.podspec @@ -46,4 +46,8 @@ Pod::Spec.new do |s| s.dependency "React-perflogger", version s.dependency "React-jsi", version s.dependency "React-logger", version + + if ENV['USE_HERMES'] == nil || ENV['USE_HERMES'] == "1" + s.dependency 'hermes-engine' + end end diff --git a/ReactCommon/hermes/React-hermes.podspec b/ReactCommon/hermes/React-hermes.podspec index bb20d12e242..d29457ecb7f 100644 --- a/ReactCommon/hermes/React-hermes.podspec +++ b/ReactCommon/hermes/React-hermes.podspec @@ -52,4 +52,5 @@ Pod::Spec.new do |s| s.dependency "glog" s.dependency "RCT-Folly/Futures", folly_version s.dependency "hermes-engine" + s.dependency "React-jsi" end diff --git a/ReactCommon/jsiexecutor/React-jsiexecutor.podspec b/ReactCommon/jsiexecutor/React-jsiexecutor.podspec index 05cdcb3f16e..9a6b4475650 100644 --- a/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +++ b/ReactCommon/jsiexecutor/React-jsiexecutor.podspec @@ -40,4 +40,8 @@ Pod::Spec.new do |s| s.dependency "RCT-Folly", folly_version s.dependency "DoubleConversion" s.dependency "glog" + + if ENV['USE_HERMES'] == nil || ENV['USE_HERMES'] == "1" + s.dependency 'hermes-engine' + end end