From 52e2cd2dea0749ba9c58439c88ce5a0ead52b343 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Date: Wed, 9 Apr 2025 15:14:08 +0200 Subject: [PATCH 1/2] fix(apple): always enable Hermes from 0.80+ --- ios/features.mjs | 26 +++++++++++++++++--------- test/ios/features.test.ts | 26 +++++++++++++++++--------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/ios/features.mjs b/ios/features.mjs index 38fdee478..d90969f9a 100644 --- a/ios/features.mjs +++ b/ios/features.mjs @@ -60,16 +60,24 @@ export function isBridgelessEnabled(reactNativeVersion, options) { * @returns {boolean | "from-source"} */ export function isHermesEnabled(platform, reactNativeVersion, options) { - const useHermes = process.env["USE_HERMES"]; - const enabled = - typeof useHermes === "string" - ? useHermes === "1" - : options["hermesEnabled"] === true; + if (reactNativeVersion < v(0, 80, 0)) { + const useHermes = process.env["USE_HERMES"]; + const enabled = + typeof useHermes === "string" + ? useHermes === "1" + : options["hermesEnabled"] === true; - // Hermes prebuilds for visionOS was introduced in 0.76 - if (enabled && platform === "visionos" && reactNativeVersion < v(0, 76, 0)) { - return "from-source"; + // Hermes prebuilds for visionOS was introduced in 0.76 + if ( + enabled && + platform === "visionos" && + reactNativeVersion < v(0, 76, 0) + ) { + return "from-source"; + } + + return enabled; } - return enabled; + return true; } diff --git a/test/ios/features.test.ts b/test/ios/features.test.ts index 5ac7084bc..95cbc8d07 100644 --- a/test/ios/features.test.ts +++ b/test/ios/features.test.ts @@ -55,31 +55,39 @@ describe("isBridgelessEnabled()", () => { }); describe("isHermesEnabled()", () => { - before(() => { + function resetEnvironmentVariables() { delete process.env["USE_HERMES"]; - }); + } - afterEach(() => { - delete process.env["USE_HERMES"]; - }); + before(resetEnvironmentVariables); + + afterEach(resetEnvironmentVariables); for (const platform of ["ios", "macos", "visionos"] as const) { it(`[${platform}] is disabled by default`, () => { - ok(!isHermesEnabled(platform, v(1, 0, 0), {})); + ok(!isHermesEnabled(platform, v(0, 79, 0), {})); }); it(`[${platform}] returns true when enabled`, () => { - ok(isHermesEnabled(platform, v(1, 0, 0), { hermesEnabled: true })); + ok(isHermesEnabled(platform, v(0, 79, 0), { hermesEnabled: true })); }); it(`[${platform}] returns true if 'USE_HERMES=1'`, () => { process.env["USE_HERMES"] = "1"; - ok(isHermesEnabled(platform, v(1, 0, 0), {})); + ok(isHermesEnabled(platform, v(0, 79, 0), {})); }); it(`[${platform}] returns false if 'USE_HERMES=0'`, () => { process.env["USE_HERMES"] = "0"; - ok(!isHermesEnabled(platform, v(1, 0, 0), { hermesEnabled: true })); + ok(!isHermesEnabled(platform, v(0, 79, 0), { hermesEnabled: true })); + }); + + it(`[${platform}] always returns true from 0.80 on`, () => { + ok(isHermesEnabled(platform, v(0, 80, 0), {})); + + process.env["USE_HERMES"] = "0"; + + ok(isHermesEnabled(platform, v(0, 80, 0), {})); }); } From 0f088c210b81eadce3687a858a300f755285dad2 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Date: Wed, 9 Apr 2025 15:43:01 +0200 Subject: [PATCH 2/2] update tests --- test/ios/app.test.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/ios/app.test.ts b/test/ios/app.test.ts index 5db5a1300..43019b66d 100644 --- a/test/ios/app.test.ts +++ b/test/ios/app.test.ts @@ -268,7 +268,7 @@ const PROJECT_FILES = { testsBuildSettings: {}, uitestsBuildSettings: {}, useBridgeless: true, - useHermes: false, + useHermes: true, useNewArch: true, xcodeprojPath: "/~/node_modules/.generated/ios/ReactTestApp.xcodeproj", }, @@ -297,7 +297,7 @@ const PROJECT_FILES = { testsBuildSettings: {}, uitestsBuildSettings: {}, useBridgeless: true, - useHermes: false, + useHermes: true, useNewArch: true, xcodeprojPath: "/~/node_modules/.generated/ios/ReactTestApp.xcodeproj", }, @@ -362,7 +362,7 @@ const PROJECT_FILES = { testsBuildSettings: {}, uitestsBuildSettings: {}, useBridgeless: true, - useHermes: false, + useHermes: true, useNewArch: true, xcodeprojPath: "/~/node_modules/.generated/macos/ReactTestApp.xcodeproj", @@ -428,7 +428,7 @@ const PROJECT_FILES = { testsBuildSettings: {}, uitestsBuildSettings: {}, useBridgeless: true, - useHermes: false, + useHermes: true, useNewArch: true, xcodeprojPath: "/~/node_modules/.generated/visionos/ReactTestApp.xcodeproj", @@ -490,7 +490,7 @@ const PROJECT_FILES = { testsBuildSettings: {}, uitestsBuildSettings: {}, useBridgeless: false, - useHermes: false, + useHermes: true, useNewArch: false, xcodeprojPath: "/~/node_modules/.generated/ios/ReactTestApp.xcodeproj", }, @@ -549,7 +549,7 @@ const PROJECT_FILES = { testsBuildSettings: {}, uitestsBuildSettings: {}, useBridgeless: false, - useHermes: false, + useHermes: true, useNewArch: false, xcodeprojPath: "/~/node_modules/.generated/macos/ReactTestApp.xcodeproj", @@ -609,7 +609,7 @@ const PROJECT_FILES = { testsBuildSettings: {}, uitestsBuildSettings: {}, useBridgeless: false, - useHermes: false, + useHermes: true, useNewArch: false, xcodeprojPath: "/~/node_modules/.generated/visionos/ReactTestApp.xcodeproj",