diff --git a/android/gradle.properties b/android/gradle.properties index 244342f2514e..42d4ff32632a 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -44,6 +44,9 @@ newArchEnabled=true # If set to false, you will be using JSC instead. hermesEnabled=true +# Use this property to enable or disable Hermes V1. +hermesV1Enabled=true + # Key Store Information MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore diff --git a/ios/Podfile b/ios/Podfile index 1d225fb991d1..e599ed08a4b6 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -89,6 +89,8 @@ target 'NewExpensify' do # ENV Variable enables/disables TurboModules ENV['RCT_NEW_ARCH_ENABLED'] = '1'; + # ENV Variable enables/disables Hermes V1 + ENV['RCT_HERMES_V1_ENABLED'] = '1'; use_react_native!( diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 9c9a00e69093..0c596791b49f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -340,9 +340,9 @@ PODS: - GTMSessionFetcher/Core (< 4.0, >= 3.3) - GTMSessionFetcher/Core (3.5.0) - GzipSwift (5.1.1) - - hermes-engine (0.14.0): - - hermes-engine/Pre-built (= 0.14.0) - - hermes-engine/Pre-built (0.14.0) + - hermes-engine (250829098.0.4): + - hermes-engine/Pre-built (= 250829098.0.4) + - hermes-engine/Pre-built (250829098.0.4) - libavif/core (0.11.1) - libavif/libdav1d (0.11.1): - libavif/core @@ -508,6 +508,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -533,6 +534,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -557,6 +559,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -583,6 +586,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -608,6 +612,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -633,6 +638,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -658,6 +664,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -683,6 +690,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -708,6 +716,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -733,6 +742,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -758,6 +768,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -783,6 +794,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -808,6 +820,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -833,6 +846,7 @@ PODS: - React-jsinspectorcdp - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimeexecutor - React-runtimescheduler - React-utils @@ -4516,7 +4530,7 @@ EXTERNAL SOURCES: :path: "../node_modules/group-ib-fp" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-v0.14.0 + :tag: hermes-v250829098.0.4 lottie-react-native: :path: "../node_modules/lottie-react-native" NitroModules: @@ -4768,7 +4782,7 @@ SPEC CHECKSUMS: AirshipServiceExtension: 50d11b2f62c4a490d4e81a1c36f70e2ecb70a27e AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 AppLogs: 3bc4e9b141dbf265b9464409caaa40416a9ee0e0 - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + boost: 659a89341ea4ab3df8259733813b52f26d8be9a5 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb EXConstants: b3c63be5f8648e4ab8e6ff5099b62f629247f969 expensify-react-native-background-task: 03c640e1f5649692d058cba48c0a138f024a6dd3 @@ -4807,7 +4821,7 @@ SPEC CHECKSUMS: GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 GzipSwift: 893f3e48e597a1a4f62fafcb6514220fcf8287fa - hermes-engine: 5125891942d0cdeca799d3a5a1bb5e766a783790 + hermes-engine: 9a70f3f40c414a11a2dd422ce023c7674a87cdfb libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 @@ -4834,7 +4848,7 @@ SPEC CHECKSUMS: RCTTypeSafety: 27927d0ca04e419ed9467578b3e6297e37210b5c React: 4bc1f928568ad4bcfd147260f907b4ea5873a03b React-callinvoker: 87f8728235a0dc62e9dc19b3851c829d9347d015 - React-Core: 76bed73b02821e5630e7f2cb2e82432ee964695d + React-Core: 176a81025968530159589ec4a67fe2962909fce9 React-CoreModules: 752dbfdaeb096658aa0adc4a03ba6214815a08df React-cxxreact: b6798528aa601c6db66e6adc7e2da2b059c8be74 React-debug: b2c9f60a9b7a81cefd737cb61e31c2bc39fdfe17 @@ -4886,7 +4900,7 @@ SPEC CHECKSUMS: React-NativeModulesApple: e554252d69442010807867cc7d70c0008048ad20 React-networking: 669cb54cc7e5b65d7dafeeb36970a1421adc8bb3 React-oscompat: 80166b66da22e7af7fad94474e9997bd52d4c8c6 - React-perflogger: d6797918d2b1031e91a9d8f5e7fdd2c8728fb390 + React-perflogger: decbf4d10c1f77d687af1d83a6ba9dc1b23715d6 React-performancecdpmetrics: 7706707d5dd49d708518a91abe456dcb585a5865 React-performancetimeline: c9807b559901c4298a92f6bcb069f49f518b7020 React-RCTActionSheet: 3bd5f5db9f983cf38d51bb9a7a198e2ebea94821 @@ -4902,7 +4916,7 @@ SPEC CHECKSUMS: React-RCTSettings: 2c45623d6c0f30851a123f621eb9d32298bcbb0c React-RCTText: 0ee70f5dc18004b4d81b2c214267c6cbec058587 React-RCTVibration: 88557e21e7cc3fe76b5b174cba28ff45c6def997 - React-rendererconsistency: ac8a9e9ee3eb299458cc848944133ff4be46cc41 + React-rendererconsistency: 5236fe878921773ef9274c44e189e057672ef5bc React-renderercss: f04cbe3b06ee071c6ca724f41a3c3aa31332601e React-rendererdebug: 2a2e4f7d42abcbec2047e989a1afda5d62905679 React-RuntimeApple: ce2ae0ea88316a7c708be1e6601e4ec5f6febdce @@ -4938,7 +4952,7 @@ SPEC CHECKSUMS: RNSentry: f73f4da92e4c20841ab16e1fa22fc289bc2f9f4e RNShare: 1c1fde2c4134b9cf220ffebbd6df9c414036d382 RNSVG: 74eb75bd44d62ba9969941e80d8f9832971c681f - RNWorklets: 01efdd402d236a13651ea5ea5437ca85a44e7afa + RNWorklets: b2d54014a57a29d3c5848283069360d982880e60 SDWebImage: 16309af6d214ba3f77a7c6f6fdda888cb313a50a SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c @@ -4952,6 +4966,6 @@ SPEC CHECKSUMS: VisionCamera: 30b358b807324c692064f78385e9a732ce1bebfe Yoga: 33b53536a0500d039f2cd78caf1d5d68712d3af7 -PODFILE CHECKSUM: ff148a26470031497393c45c4ba773f18f371221 +PODFILE CHECKSUM: 66f81d1d8606fb5a02422de6198484f2b557ca22 COCOAPODS: 1.16.2 diff --git a/package-lock.json b/package-lock.json index 2e592a13c799..c15deca3d5ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26252,9 +26252,9 @@ "license": "LGPL-3.0" }, "node_modules/hermes-compiler": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-0.14.0.tgz", - "integrity": "sha512-clxa193o+GYYwykWVFfpHduCATz8fR5jvU7ngXpfKHj+E9hr9vjLNtdLSEe8MUbObvVexV3wcyxQ00xTPIrB1Q==", + "version": "250829098.0.4", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-250829098.0.4.tgz", + "integrity": "sha512-8PEHLTuGOXUAnv2zByUG7Vud0TbU21fPuVqlMuek8PZgdYwb7KFWjw3+6In9J93Tx/6c/nRf5I30vzbaHBlgAQ==", "license": "MIT" }, "node_modules/hermes-estree": { diff --git a/package.json b/package.json index 05567879c208..b87a845d6bec 100644 --- a/package.json +++ b/package.json @@ -371,6 +371,7 @@ "express": "4.20.0", "elliptic": "6.5.7", "fast-json-patch": "3.1.1", + "hermes-compiler": "250829098.0.4", "webpack": "^5.104.1", "@blakeembrey/template": "1.2.0", "body-parser": "1.20.3", diff --git a/rock.config.mjs b/rock.config.mjs index 3bfe70bca218..3f441f1ac5a3 100644 --- a/rock.config.mjs +++ b/rock.config.mjs @@ -22,6 +22,7 @@ export default { android: platformAndroid({sourceDir: isHybrid ? './Mobile-Expensify/Android' : './android'}), }, fingerprint: { + extraSources: ['android/gradle.properties', 'ios/Podfile', 'scripts/compute-patches-hash.sh'], env: ['USE_WEB_PROXY', 'PUSHER_DEV_SUFFIX', 'SECURE_NGROK_URL', 'NGROK_URL', 'USE_NGROK', 'FORCE_NATIVE_BUILD'], ignorePaths: ['Mobile-Expensify/Android/assets/app/shared/bundle.js'], }, diff --git a/scripts/compute-patches-hash.sh b/scripts/compute-patches-hash.sh index b87e178a728b..fc8c23549bd5 100755 --- a/scripts/compute-patches-hash.sh +++ b/scripts/compute-patches-hash.sh @@ -13,4 +13,14 @@ PATCH_DIRS=("$@") readonly PATCH_DIRS # Find all patches, compute their hash, put filename before hash, sort, compute hash of hashes -find "${PATCH_DIRS[@]}" -type f \( -name "react-native+*.patch" -o -name "@react-native+*.patch" \) -exec sha256sum {} \; | awk '{split($2, pathParts, "/"); print pathParts[length(pathParts)], $1 }' | sort | sha256sum | awk '{print $1}' +PATCHES_HASH=$(find "${PATCH_DIRS[@]}" -type f \( -name "react-native+*.patch" -o -name "@react-native+*.patch" \) -exec sha256sum {} \; | awk '{split($2, pathParts, "/"); print pathParts[length(pathParts)], $1 }' | sort | sha256sum | awk '{print $1}') + +# Include hermesV1Enabled flag in the hash so that enabling Hermes V1 invalidates +# prebuilt artifacts and triggers a build from source. +ANDROID_GRADLE_PROPS="$SCRIPT_DIR/../android/gradle.properties" + +if [ -f "$ANDROID_GRADLE_PROPS" ] && grep -q '^[[:space:]]*hermesV1Enabled[[:space:]]*=[[:space:]]*true' "$ANDROID_GRADLE_PROPS"; then + PATCHES_HASH=$(printf "%s" "${PATCHES_HASH}-hermesV1" | sha256sum | awk '{print $1}') +fi + +echo "$PATCHES_HASH"