Skip to content

fix(prebuild): derive Apple header slices from binary platforms - #3102

Closed
Saad Najmi (Saadnajmi) wants to merge 24 commits into
microsoft:review/0.87-hermes-testsfrom
Saadnajmi:0.87/header-platforms
Closed

Saad Najmi (Saadnajmi) wants to merge 24 commits into
microsoft:review/0.87-hermes-testsfrom
Saadnajmi:0.87/header-platforms

Conversation

@Saadnajmi

@Saadnajmi Saad Najmi (Saadnajmi) commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Derive header slices from actual binary platforms, with regression coverage. Eight-file comparison following Hermes URL tests. Header inventory follows.

Release stack

Review mirrors are comparison anchors, not evidence of prerequisite approval. Retarget as predecessors land; keep stable sync on the release path.

Validation

Local final-candidate evidence includes clean consumers, API/type checks, and scoped native artifact checks. Those results retain their recorded source-tree scope and do not establish full test coverage at this intermediate head. Fresh CI and review are required. Known CI repairs are being prepared separately.

PR merges and npm publication remain owner-controlled.

Copilot AI and others added 24 commits September 21, 2026 01:17
Combine upstream stable API, Metro, CocoaPods facade, header framework, SwiftPM, and release-testing changes with the macOS fork workspace identities and platform support.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fold the upstream setup-env alias into the macOS moduleNameMapper so the later fork mapping does not override it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Normalize pnpm workspace paths emitted by API Extractor back to public package specifiers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Regenerate the strict TypeScript API snapshot with Node 22 after the stable API changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Treat an empty repository URL as no remote match so status checks use origin instead of an invalid root-relative ref.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Seed the two public macOS artifacts at rc.0 in Changesets prerelease mode so the patch changeset materializes exactly 0.87.0-rc.1.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refresh the Yarn 4.12 lock after seeding the 0.87 release-candidate package versions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pin the upstream React Native peer and published workspace dependencies while leaving private workspace versions unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use fs.cpSync for the headers sidecar so paths are not shell-expanded and Flow sees the declared API.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Map react-native imports to the fork workspace under strict bundler resolution and keep the API transform Flow-clean.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refresh Babel Unicode transforms and rc.0 release-seed codegen podspec snapshots.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Record the constrained release dependencies and explicit plist runtime dependency.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fallback from third-party-podspecs to the react-native package root when Node resolution is unavailable.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Generate core and dependency facades for every supported Apple platform instead of hardcoding iOS.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Regenerate the source-mode RNTester lock with Bundler 2.4.12 and CocoaPods 1.14.2 after seeding rc.0 metadata.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Return a nonzero status when either Apple prebuild CLI rejects a platform name.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Model fork dispatch precedence, physical platform implementations, SDK AppKit, and packaged sibling imports; shrink six resolved baseline entries.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Apply the repository import order required by the final lint gate.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rebuild the lock from the d8 Berry baseline with the final 0.87 manifests using a targeted Yarn install. This retains the stable-mandated Metro 0.87, ob1, Hermes compiler 0.15, plist, prerelease peer, workspace, and React alignment closure while removing 122 opportunistic resolution rows.

The two independent generation runs were byte-identical. Because Metro and ob1 had not yet crossed the configured seven-day threshold, generation used the approved process-local YARN_NPM_MINIMAL_AGE_GATE=0 override for those commands only; four normal 7d immutable consumers then passed with no override and npmMinimalAgeGate remained 7d.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The broad age-zero lock regeneration at 43fd selected the @babel 7.29.7 cohort and Unicode 16 data, corrupting generated transform fixture expectations. The corrected conservative lock emits the canonical output from immediate pre-corruption stable tree 650a8a41, while retaining the rc-seed codegen podspec snapshot.

These 14 generated Babel output fixtures were reproduced byte-identically in two fresh focused update runs and match 650a8a41 exactly. No source, input, codegen snapshot, or yarn.lock bytes change.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Saadnajmi

Copy link
Copy Markdown
Collaborator Author

Superseded by #3105 in the independently reviewed linear 0.87 stack tracked by #3098. The implementation is already present there, making this checkpoint an empty diff after re-stacking. Closing this duplicate review without merging or deleting its branch. The topology-only final release tree remains byte-identical to the original candidate; reviewed CI repairs are tracked separately.

Saad Najmi (Saadnajmi) added a commit that referenced this pull request Sep 27, 2026
<!-- release-stack-tracker:start -->
## Current release stack

- Tracker: #3098
- Position: **2 of 17**.
- Review base: `0.83-stable`. Retarget as predecessors land; stable
releases retain separate stable branches.
- Current source: the PR's Commits tab tracks the latest repaired branch
head.

RNM 0.83.0 with RN 0.83.10. Publish and verify before the next minor.

### Validation and backups

The branch-specific repaired source passed hardened immutable
installation, constraints, and its complete release-helper selection.
The selected 18-head packet records **1,406 passing helper tests**.
Exact source-tree equivalence is used for rewritten endpoints where
applicable; the two changed linear RC checkpoints were tested
separately.

Native/API evidence retains its recorded scope. The SwiftPM and RNTester
repairs have six focused native build passes. Public stable versions and
runtime/API contents were preserved except for the independently
reviewed SwiftPM destination repair where applicable.

Public-registry lock correction passed all 18 hosted generation,
hardened immutable, constraints, and metadata-audit jobs in [run
35769816507](https://github.com/Saadnajmi/react-native-macos/actions/runs/35769816507).
Only equivalent executable-path spelling changes are permitted;
dependency versions, checksums, and ranges are unchanged. The previous
functional test results remain applicable to this metadata-only
correction. Fresh GitHub CI and review remain required. Previous heads
are preserved on the same repository under
`backup/pre-ci-repair-20260922/<original-branch>` and
`backup/pre-public-registry-20260922/<original-branch>`; local
complete-history bundles were verified as well.

The 0.87 PR sequence is one first-parent path: **#3037 → #3104 → #3105 →
#3106 → #3100 → #3101 → #3107**. The redundant #3102/#3103 reviews are
consolidated into #3105.

This section supersedes earlier stack order, source identity, and
validation-status notes below.
<!-- release-stack-tracker:end -->

---

## Summary

- sync the 0.83 stable line through React Native 0.83.10
- restore the RedBox 2.0 CoreModules files dropped during the stable
merge resolution
- preserve the existing AppKit RedBox V1 behavior from #3027
- backport the production RCTUIKit compatibility primitives and RedBox
2.0 AppKit consumer from #3054

This is the single 0.83 stable-line PR for both the upstream sync and
the effective RedBox 2.0/AppKit backport. It supersedes #3027.

## Provenance

The four additive commits are stacked on the previously reviewed #3022
head:

1. restore the extracted upstream RedBox 2.0 CoreModules files
2. apply the focused AppKit V1 adaptation
3. add the production RCTUIKit table/label/button primitives
4. add the RedBox 2.0 AppKit consumer

The V1 adaptation is byte-identical to #3027. Every other changed
implementation file is byte-identical to the reviewed #3054 production
stack. Native RCTUITableView tests and their project wiring are
intentionally excluded, matching the repository-owner review decision on
#3056.

## Validation

- RNTester macOS build passed (`EXIT=0`, `** BUILD SUCCEEDED **`)
- all nine changed Objective-C/Objective-C++ implementations compiled
- RNTester-macOS linked, validated, and produced the app bundle
- zero compile or linker errors
- build log SHA-256:
`d7f6c18b7d570d06a79297c774e6343a92e178910374ea9ab5a99d8ac77aad4e`
- immutable install, lint, format, and focused Jest passed
- TypeScript failures are pre-existing in files untouched by this PR;
generated TypeScript is not configured on this stable branch
- RedBox 2.0 controller fork ratio remains the reviewed `842 / 144 / 16`
total lines / fork lines / top-level macOS guards

manual macOS RedBox 2.0 OFF/ON verification OUTSTANDING; do not undraft
until performed

The bounded manual attempt could not obtain a script URL in the
DerivedData-built app even with Metro ready and serving the bundle, so
no manual OFF or ON behavior item is claimed as passed.

---------

Co-authored-by: Alex Hunt <hello@alexhunt.dev>
Co-authored-by: Riccardo Cipolleschi <cipolleschi@meta.com>
Co-authored-by: Jakub Piasecki <piaseckijakub@meta.com>
Co-authored-by: Jakub Piasecki <jakub.piasecki@swmansion.com>
Co-authored-by: React Native Bot <bot@reactnative.dev>
Co-authored-by: Christian Falch <christian.falch@gmail.com>
Co-authored-by: Alex Hunt <huntie@meta.com>
Co-authored-by: Luna Wei <luwe@meta.com>
Co-authored-by: Tommy Nguyen <4123478+tido64@users.noreply.github.com>
Co-authored-by: Phil Pluckthun <phil@kitten.sh>
Co-authored-by: Dawid Malecki <dawid.malecki21@gmail.com>
Co-authored-by: Alex Hunt <hello@alexhunt.io>
Co-authored-by: Fabrizio Cucci <fabriziocucci@meta.com>
Co-authored-by: Nicola Corti <ncor@meta.com>
Co-authored-by: Thibault Malbranche <thibault@brigad.co>
Co-authored-by: Ismar Besic <46565776+ismarbesic@users.noreply.github.com>
Co-authored-by: Ben Hamilton <benhamilton@terraformation.com>
Co-authored-by: LeoTM <1881059+leotm@users.noreply.github.com>
Co-authored-by: Alan Hughes <alan@expo.io>
Co-authored-by: Moti Zilberman <moti@meta.com>
Co-authored-by: Terry Kwon <kastopia@meta.com>
Co-authored-by: Radek Czemerys <7029942+radko93@users.noreply.github.com>
Co-authored-by: Rubén Norte <rubennorte@gmail.com>
Co-authored-by: Pieter De Baets <pieterdb@meta.com>
Co-authored-by: Ruslan Lesiutin <hoxy@meta.com>
Co-authored-by: Isaac Israel <isaac.israel@hibob.io>
Co-authored-by: Mark Smith <mcs@pearlcrescent.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants