Skip to content

[ios][precompile] refactor header files generator for prebuilt React framework#54841

Closed
chrfalch wants to merge 6 commits into
mainfrom
chrfalch/react-precompile-refactor-header-file-generator
Closed

[ios][precompile] refactor header files generator for prebuilt React framework#54841
chrfalch wants to merge 6 commits into
mainfrom
chrfalch/react-precompile-refactor-header-file-generator

Conversation

@chrfalch

@chrfalch chrfalch commented Dec 10, 2025

Copy link
Copy Markdown
Collaborator

Summary:

Replace the regex-based approach for parsing podspec files with a declarative configuration system for header file collection:

Add headers-config.js with explicit podspec configurations defining header patterns, directories, and subspecs

  • Add vfs.js to generate VFS overlay YAML files for Clang virtual file system support
  • Refactor headers.js to use the new configuration-based approach with support for nested subspecs and path preservation
  • Update xcframework.js to handle the new header mapping structure with source/target paths
  • This provides more reliable and maintainable header file collection for XCFramework builds by avoiding fragile regex parsing of Ruby podspec files.

Prev PR: #54840
Next PR: #54842

Changelog:

[IOS] [FIXED] - refactored header files generator for prebuilt React framework

Test Plan:

Run RNTester with prebuilt

@chrfalch chrfalch requested a review from cipolleschi December 10, 2025 14:15
@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 Dec 10, 2025
@facebook-github-bot facebook-github-bot added p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. labels Dec 10, 2025
@github-actions

Copy link
Copy Markdown

Job Summary for Gradle

Test All :: run_fantom_tests
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
react-native-github :private:react-native-fantom:buildFantomTester 9.0.0 Build Scan not published

@cipolleschi cipolleschi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See my comment below. There are also some warnings on redeclared variables and variables declared but not used, so perhaps this PR requires a bit of work yet?

Comment thread packages/react-native/scripts/ios-prebuild/headers-config.js Outdated
@chrfalch chrfalch requested a review from cipolleschi December 10, 2025 19:41
@github-actions

Copy link
Copy Markdown

Job Summary for Gradle

Test All :: run_fantom_tests
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
react-native-github :private:react-native-fantom:buildFantomTester 9.0.0 Build Scan not published

@cipolleschi cipolleschi changed the base branch from main to chrfalch/react-precompile-change-to-angled-include-in-umbrella December 16, 2025 15:27

@cipolleschi cipolleschi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing I'm not super excited about is that we are still depending on the podspec structure to decide which headers we need. That's ok for now, but as soon as we drop the Cocoapods infra, this will have to be rewritten again.

Comment thread packages/react-native/scripts/ios-prebuild/headers-config.js
.flat();

// Use the first podspec spec name as the podspec name (this is the root spec in the podspec file)
const podSpecName = podSpecsWithHeaderFiles[podspec][0].specName.replace(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you look into these warning too? @chrfalch

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These warnings are fixed in the next PR in the stack. Sorry!

@chrfalch chrfalch force-pushed the chrfalch/react-precompile-change-to-angled-include-in-umbrella branch 3 times, most recently from a91c7bb to 0b0199e Compare January 5, 2026 13:38
@chrfalch chrfalch force-pushed the chrfalch/react-precompile-refactor-header-file-generator branch from d0c3305 to b1fdfaf Compare January 5, 2026 13:43
@chrfalch chrfalch changed the base branch from chrfalch/react-precompile-change-to-angled-include-in-umbrella to main January 5, 2026 13:44
@meta-codesync

meta-codesync Bot commented Jan 14, 2026

Copy link
Copy Markdown

@cipolleschi has imported this pull request. If you are a Meta employee, you can view this in D90674355.

meta-codesync Bot pushed a commit that referenced this pull request Jan 14, 2026
Summary:
To make the later VFS overlays work, our React umbrella header needs to use angled import syntax instead of quoted".

This is so that the compiler will look up by module and not only by path.

Prev PR: #54839
Next PR: #54841

## Changelog:

[IOS] [FIXED] - changed umbrella header template to use angled import syntax

Pull Request resolved: #54840

Test Plan: Run RNTester with prebuilds

Reviewed By: cortinico

Differential Revision: D89377015

Pulled By: cipolleschi

fbshipit-source-id: b1be8223b7cad5d09a918464f7bac6edad4bd051

@cortinico cortinico left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review automatically exported from Phabricator review in Meta.

Comment thread packages/react-native/scripts/ios-prebuild/headers-config.js
Comment thread packages/react-native/scripts/ios-prebuild/xcframework.js Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from @cortinico

this needs to be updated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from @cortinico

same as other comments

Replace the regex-based approach for parsing podspec files with a declarative configuration system for header file collection:

Add headers-config.js with explicit podspec configurations defining header patterns, directories, and subspecs

- Add vfs.js to generate VFS overlay YAML files for Clang virtual file system support
- Refactor headers.js to use the new configuration-based approach with support for nested subspecs and path preservation
- Update xcframework.js to handle the new header mapping structure with source/target paths
- This provides more reliable and maintainable header file collection for XCFramework builds by avoiding fragile regex parsing of Ruby podspec files.
Now it reads from podspec files, except for some special cases that we have in the config file.

Updated RCTSwiftUIWrapper.podspec to use podspec_sources (which we use to detect source)

I tested this against the header files I got with the previous iteration, and also with the ones installed by Cocoapods.
@chrfalch chrfalch force-pushed the chrfalch/react-precompile-refactor-header-file-generator branch from b1fdfaf to 60dd56a Compare January 26, 2026 19:19
@meta-codesync meta-codesync Bot closed this in 3fad7dc Jan 27, 2026
meta-codesync Bot pushed a commit that referenced this pull request Jan 27, 2026
Summary:
To solve our problem with header files from the React.XCFramework not being consumable due to the legacy Cocoapods headers, we used to point all header search / resolving into the Pods/Headers folder when building even with the framework installed.

This is a problem since an xcframework expects a modular header structure that can be consumed from within the headers folder of the framework.

The headers are used for both Objective-c compiling and for creating clang modules that can be consumed by Swift in our setup.

This commit fixes the above issues and makes a modular clang virtual file system from the header files we distribute. This vfs-overlay file will then be used by the `rncore.rb` script when installing the 'React-Core-prebuilt' pod and map the header files requested in the source code to the actual location on disk where the React.xcframework headers are installed.

Here are the changes:

- Added vfs.js with types for creating clang virtual file system overlays
- Added resolving the paths in the vfs file to the actual install path
- Added installing the vfs overlay with the switch `-ivfsoverlay <path>` to compiler settings for both obj-c and swift on pod installation
- Add vfs targets to the app target on post install

Prev PR: #54841

bypass-github-export-checks

## Changelog:

[IOS] [FIXED] - added support for clang virtual file system in React.XCFramework

Pull Request resolved: #54842

Test Plan: Run RNTester with prebuilt

Reviewed By: cortinico

Differential Revision: D90674493

Pulled By: cipolleschi

fbshipit-source-id: 2b974f0651af351febdd4eb05a37a359a96aa070
@facebook-github-bot facebook-github-bot added the Merged This PR has been merged. label Jan 27, 2026
@meta-codesync

meta-codesync Bot commented Jan 27, 2026

Copy link
Copy Markdown

@cipolleschi merged this pull request in 3fad7dc.

@react-native-bot

Copy link
Copy Markdown
Collaborator

This pull request was successfully merged by @chrfalch in 3fad7dc

When will my fix make it into a release? | How to file a pick request?

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. Merged This PR has been merged. p: Expo Partner: Expo Partner 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.

5 participants