-
Notifications
You must be signed in to change notification settings - Fork 25k
[ios][precompile] refactor header files generator for prebuilt React framework #54841
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: chrfalch/react-precompile-change-to-angled-include-in-umbrella
Are you sure you want to change the base?
Conversation
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.
Job Summary for GradleTest All :: run_fantom_tests
|
cipolleschi
left a comment
There was a problem hiding this comment.
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?
| */ | ||
|
|
||
| // Remember that our GLOB library doesn't like {h} in its patterns, so we use **/*.h instead of **/*.{h} | ||
| const PodSpecConfigurations /*: {[key: string]: PodSpecConfiguration} */ = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not really a fan that we have to maintain this manually, to be fair...
Can't we have a script that generates this file by globbing all the podspecs we have in the framework?
I also know that the pod command has an option to output the json representation of a .podspec file. Perhaps we can use that instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rewrote it to read podspec_sources from all podspec files and exclude files - and then for the header-configs.js to contain a list of exception configuration for those pod specs that contains programmatically generated lists of exclude files, sources or specs.
Outputs exactly the same list of header files as the first iteration.
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.
Job Summary for GradleTest All :: run_fantom_tests
|
cipolleschi
left a comment
There was a problem hiding this comment.
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.
| preservePaths?: Array<string>, | ||
| } | {disabled: true}>; | ||
| */ | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps let's add a comment here to explain why this is needed and which podspec needs custom mapping.
Something like:
/*
Some pods have special configuration for where the Headers needs to be located or for how they are composed.
The following contains a representation of those exceptions.
* React-jsi: needs the headers in <folder>
* React-Fabric: it is composed by multiple subspecs and they require headers in specific folders:
* animated: react/renderer/animated
* ...
*/
| s.platforms = min_supported_versions | ||
| s.source = source | ||
| s.source_files = "*.{h,m}" | ||
| s.source_files = podspec_sources("*.{h,m}", "*.{h}") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we still needs the podspec_sources function, then?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes - it is still used to get the correct headers for pod specs without exceptions!
| .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( |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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!
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
Prev PR: #54840
Next PR: #54842
Changelog:
[IOS] [FIXED] - refactored header files generator for prebuilt React framework
Test Plan:
Run RNTester with prebuilt