fix: include macOS slice in universal Hermes xcframework#1970
fix: include macOS slice in universal Hermes xcframework#1970Saadnajmi wants to merge 1 commit intofacebook:mainfrom
Conversation
cipolleschi
left a comment
There was a problem hiding this comment.
This is great for unifying the build. However, I feel that we need to update the ci also, because, IIRC, github builds slices in isolation and it might not be calling build-ios-framework for mac os.
So basically we never hit these changes in CI in this way
74055e3 to
b6db5d6
Compare
…chitecture - Add macosx to get_architecture, get_deployment_target, create_framework, and build_universal_framework so the unified script handles all platforms - Simplify get_architecture from 5 branches to 2 - CI continues using build-mac-framework.sh for the standalone macOS framework (needed by the podspec), while the assembly step now includes macosx in the universal xcframework via build_universal_framework Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
b6db5d6 to
1f93e87
Compare
I think before my change we always had a macos slice and job in CI, and after this change we make sure that that slice is also in the universal xcframework by adding macos to build_universal_framework() |
## Summary Overhauls the macOS SPM prebuild CI pipeline, renaming it from "Build SwiftPM" to "Prebuild macOS Core" to align with upstream's `prebuild-ios-core.yml` convention. ### Hermes resolution (`microsoft-resolve-hermes.yml`) - Extract Hermes build into a separate reusable workflow (`Resolve Hermes`) - Download upstream Hermes tarball from Maven/Sonatype and recompose the xcframework to include the macOS slice — avoids ~90 min build-from-source - Check if macOS is already in the universal xcframework before recomposing (future-proofing for upstream Hermes PRs: [#1958](facebook/hermes#1958), [#1970](facebook/hermes#1970), [#1971](facebook/hermes#1971)) - Fall back to resolving the Hermes commit at the merge base with facebook/react-native → cache check → build from source ### Prebuild pipeline (`microsoft-prebuild-macos-core.yml`) - Expand build matrix to include `ios-simulator` and `visionos-simulator` slices - Add `compose-xcframework` job that assembles all slices into `React.xcframework` with dSYMs - Add content-hash caching for slice builds and composed xcframework (save on main and any stable branch) - Fix Hermes version marker mismatch (`HERMES_VERSION=prebuilt` bypasses version resolution entirely) - Use `microsoft-setup-toolchain` action consistently across all Hermes build jobs - Add macOS and visionOS to `extractDestinationFromPath` for dSYM symbol copying ### Script refactoring - Rename `macosVersionResolver.js` → `microsoft-hermes.js` - Move CI-specific logic (download, recompose, CLI dispatch) to `.github/scripts/resolve-hermes.mts` using the existing zx pattern - Keep `microsoft-hermes.js` as a pure library (version resolution, merge base commit lookup) - Use Node's `parseArgs` for CLI argument parsing - Fix `createRequire` interop for importing CommonJS modules from ESM `.mts` script ## Test plan - [ ] All 5 build jobs pass (ios, ios-simulator, macos, visionos, visionos-simulator) - [ ] `compose-xcframework` job succeeds - [ ] `ReactCoreDebug.xcframework.tar.gz` artifact is downloadable from GitHub Actions - [ ] Downloaded xcframework contains all expected platform slices - [ ] Cache hit skips build on subsequent runs with same source hash - [ ] Hermes resolve fast path downloads and recomposes upstream tarball (~1 min vs ~90 min) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary Backport of #2920 to `0.81-stable`. Overhauls the macOS SPM prebuild CI pipeline, renaming it from "Build SwiftPM" to "Prebuild macOS Core" to align with upstream's `prebuild-ios-core.yml` convention. ### Hermes resolution (`microsoft-resolve-hermes.yml`) - Extract Hermes build into a separate reusable workflow (`Resolve Hermes`) - Download upstream Hermes tarball from Maven and recompose the xcframework to include the macOS slice — avoids ~90 min build-from-source - Check if macOS is already in the universal xcframework before recomposing (future-proofing for upstream Hermes PRs: [#1958](facebook/hermes#1958), [#1970](facebook/hermes#1970), [#1971](facebook/hermes#1971)) - Fall back to resolving the Hermes commit at the merge base with facebook/react-native → cache check → build from source ### Prebuild pipeline (`microsoft-prebuild-macos-core.yml`) - Expand build matrix to include `ios-simulator` and `visionos-simulator` slices - Add `compose-xcframework` job that assembles all slices into `React.xcframework` with dSYMs - Add content-hash caching for slice builds and composed xcframework (save on main and any stable branch) - Fix Hermes version marker mismatch (`HERMES_VERSION=prebuilt` bypasses version resolution entirely) - Use `microsoft-setup-toolchain` action consistently across all Hermes build jobs ### Script refactoring - Rename `macosVersionResolver.js` → `microsoft-hermes.js` - Add CLI entry point, recompose function, and flow comments directly in `microsoft-hermes.js` (0.81 doesn't have `.github/scripts/` zx pattern) - Use `void` prefix for async CLI dispatch to satisfy Flow `unused-promise` lint - Add `visionos-simulator` platform to `ios-prebuild` CLI (already present on main) ## Test plan - [ ] All 5 build jobs pass (ios, ios-simulator, macos, visionos, visionos-simulator) - [ ] `compose-xcframework` job succeeds - [ ] `ReactCoreDebug.xcframework.tar.gz` artifact is downloadable from GitHub Actions - [ ] Downloaded xcframework contains all expected platform slices - [ ] Cache hit skips build on subsequent runs with same source hash - [ ] Hermes resolve fast path downloads and recomposes upstream tarball (~1 min vs ~90 min) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Summary
Mirror of #1958 (targeting
static_h), adapted for the legacymainbranch.Unlike the
static_hPR which consolidates all Apple build scripts and removesbuild-mac-framework.sh, this PR takes a minimal approach: it adds macOS support to the existingbuild-ios-framework.shfunctions (get_architecture,get_deployment_target,create_framework,build_universal_framework) so the macOS slice is included in the universal xcframework.build-mac-framework.shis left in place for backward compatibility on this legacy branch.Motivation
The context of this change is microsoft/react-native-macos#2815, where we are adding SPM / prebuild support to React Native macOS.
Including the macOS slice in the universal xcframework allows react-native-macos to use the same prebuilt Hermes artifacts as react-native for iOS, visionOS, and tvOS — without platform-specific patching.
Test plan
CI should pass. The
build_apple_framework "macosx"call is already exercised bybuild-mac-framework.sh— this PR just routes it through the same path as every other platform.