Skip to content

Set always_out_of_date on hermes-engine Replace Hermes phase#56912

Open
ramonclaudio wants to merge 1 commit into
facebook:mainfrom
ramonclaudio:fix/hermes-podspec-always-out-of-date
Open

Set always_out_of_date on hermes-engine Replace Hermes phase#56912
ramonclaudio wants to merge 1 commit into
facebook:mainfrom
ramonclaudio:fix/hermes-podspec-always-out-of-date

Conversation

@ramonclaudio
Copy link
Copy Markdown

Summary:

hermes-engine.podspec's [Hermes] Replace Hermes for the right configuration, if needed script_phase is missing :always_out_of_date, so Xcode 14+ emits a will be run during every build because it does not specify any outputs warning on every clean iOS build of every project on the default prebuilt-release-tarball Hermes path. Set the flag using the same script_phase = {...} + Pod::VERSION >= 1.13.0 guard shape as the two sibling Replace X for the right configuration phases in this package (React-Core-prebuilt.podspec from #52133, ReactNativeDependencies.podspec from #49812). Same property previously accepted in #48495 for React-RCTFBReactNativeSpec.podspec. hermes-engine is the last Replace X phase in the package without it.

Changelog:

[IOS] [FIXED] - Set always_out_of_date on hermes-engine's Replace Hermes script phase

Test Plan:

pod install + xcodebuild on RN 0.85.3 against the default prebuilt Hermes path. The Hermes phase's warning: ... will be run during every build because it does not specify any outputs downgrades to note: ... "Based on dependency analysis" is unchecked, matching the three sibling phases already fixed. Generated Pods.xcodeproj/project.pbxproj carries alwaysOutOfDate = 1; on the phase. Script body unchanged, phase still runs every build, Hermes binary still replaced based on $CONFIGURATION.

The `[Hermes] Replace Hermes for the right configuration, if needed`
script_phase has no declared outputs because it overwrites the prebuilt
Hermes binary in place based on `$CONFIGURATION`. Xcode 14+ emits
"will be run during every build because it does not specify any
outputs" on every clean build of every project on the prebuilt-release
tarball path.

Set `script_phase[:always_out_of_date] = "1"` guarded by a
`Pod::VERSION >= 1.13.0` check. Apple's documented opt-in for "yes,
this phase intentionally runs every build." The phase still runs every
build. The warning downgrades to a `note`.

Matches the existing shape of the two sibling `Replace X for the right
configuration` script_phases in the same package:
  - `React-Core-prebuilt.podspec` (facebook#52133)
  - `third-party-podspecs/ReactNativeDependencies.podspec` (facebook#49812)

Same property previously accepted in facebook#48495 (`088fcb1e5d`) for
`React-RCTFBReactNativeSpec.podspec` and the codegen podspecs (later
consolidated in facebook#50317). `hermes-engine` is the last `Replace X` phase
in the package without it.
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label May 21, 2026
@facebook-github-tools facebook-github-tools Bot added the Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. label May 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant