-
Notifications
You must be signed in to change notification settings - Fork 24.9k
[iOS][precompile] Support dynamic static linkage with prebuilts #53432
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
[iOS][precompile] Support dynamic static linkage with prebuilts #53432
Conversation
To be able to handle cocoapods USE_FRAMEWORKS with both dynamic/static linkage and precompiled we needed a common way to resolve this. The issue was that when using precompiled and USE_FRAMEWORKS our precompiled framework caused the resulting Pods project to only include header files - hence there where no need to change the header_mappings_dir which a lot of the podspecs did. A method was added that handles this in a common way.
Replaced logic for resolving header mappings and module name using the new method `resolve_use_frameworks` in all podspecs. Also added `React-oscompat` dependency on `React-jsiinspector_modern` which failed when linkage was "dynamic".
When using precompiled and building with frameworks (USE_FRAMEWORKS) we need to explicitly add the correct path to ReactCodegen when calling `create_header_search_path_for_frameworks` to ensure libraries can access their codegen files. This commit adds an explicit check to make sure we add the correct path when using frameworks and the pod is ReactCodegen. Added includes in the NativeCXXModuleExample.cpp file to test this.
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.
Thanks for working on this fix!
packages/rn-tester/NativeCxxModuleExample/NativeCxxModuleExample.cpp
Outdated
Show resolved
Hide resolved
Co-authored-by: Riccardo Cipolleschi <[email protected]>
After a github `suggestion` we had a superfluous `end`. Sorry for that.
This has been picked in 0.81 by merging #53477 which is this very same PR but opened against the 0.81-stable branch. |
@cipolleschi has imported this pull request. If you are a Meta employee, you can view this in D81127796. |
@cipolleschi merged this pull request in e723ca4. |
Summary:
To be able to handle cocoapods USE_FRAMEWORKS with both dynamic/static linkage and precompiled we needed a common way to resolve this.
The issue was that when using precompiled and USE_FRAMEWORKS our precompiled framework caused the resulting Pods project to only include header files - hence there where no need to change the header_mappings_dir which a lot of the podspecs did.
When using precompiled and building with frameworks (USE_FRAMEWORKS) we need to explicitly add the correct path to ReactCodegen when calling
create_header_search_path_for_frameworks
to ensure libraries can access their codegen files.resolve_use_frameworks
in all podspecs.Changelog:
[IOS] [FIXED] - Fixed using USE_FRAMEWORKS (static/dynamic) with precompiled binaries
Test Plan:
Build RN-Tester with USE_FRAMEWORKS static and dynamic
Tests ran:
✅ Build with source and no USE_FRAMEWORKS
✅ Build with source and USE_FRAMEWORKS = static
🔴 Build with source and USE_FRAMEWORKS = dynamic
Undefined symbols for architecture arm64:
"facebook::react::oscompat::getCurrentProcessId()", referenced from:
facebook::react::jsinspector_modern::HostTargetTraceRecording::start() in HostTargetTraceRecording.o
ld: symbol(s) not found for architecture arm64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
This fails on
main
as well.FIXED when adding dep on React-oscompat when USE_FRAMEWORKS=dynamic:
✅ Build with source and USE_FRAMEWORKS = dynamic
✅ Build with precompiled and no USE_FRAMEWORKS
✅ Build with precompiled and USE_FRAMEWORKS = static
✅ Build with precompiled and USE_FRAMEWORKS = dynamic