Skip to content

fix(ios): allow non-modular React includes in RNFB podspecs - #9200

Merged
russellwheatley merged 9 commits into
mainfrom
ios-podspec-rncore-prebuilt
Aug 19, 2026
Merged

fix(ios): allow non-modular React includes in RNFB podspecs#9200
russellwheatley merged 9 commits into
mainfrom
ios-podspec-rncore-prebuilt

Conversation

@russellwheatley

@russellwheatley russellwheatley commented Aug 18, 2026

Copy link
Copy Markdown
Member

RNFB umbrellas fail -Wnon-modular-include-in-framework-module under use_frameworks!. Set CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES=YES on pod_target_xcconfig before RN's install_modules_dependencies, so helper HEADER_SEARCH_PATHS and c++20 are not wiped.

On RN 0.84+, install_modules_dependencies already calls add_rncore_dependency. Live RNFB pods do not call it again. The package template still does, because it does not use that helper.

Maintainer reimplementation of #9024 (not merged as-is). Producer-side podspec compile only. Expo forceStaticLinking and tests/ with prebuilt RNCore on are still open. This is the next piece of work.

Related: #8883

russellwheatley and others added 5 commits August 18, 2026 10:37
RNFBApp did not opt into RN's prebuilt RNCore helper, so <React/...>
headers fail to resolve when RCT_USE_PREBUILT_RNCORE=1. Also allow
non-modular includes so the umbrella validates under use_frameworks!.

Co-authored-by: x-Wawa <wayan.neel@gmail.com>
…ebuilt RNCore

Remaining RNFB podspecs did not opt into RN's prebuilt RNCore helper, so
<React/...> headers fail to resolve when RCT_USE_PREBUILT_RNCORE=1. Set
pod_target_xcconfig before the RN helpers so HEADER_SEARCH_PATHS and c++20
are not overwritten.

Co-authored-by: x-Wawa <wayan.neel@gmail.com>
@codecov

codecov Bot commented Aug 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 68.42%. Comparing base (7d58b6c) to head (2d35267).

Additional details and impacted files
@@             Coverage Diff              @@
##               main    #9200      +/-   ##
============================================
+ Coverage     68.40%   68.42%   +0.03%     
  Complexity     1915     1915              
============================================
  Files           516      516              
  Lines         37853    37853              
  Branches       5183     5183              
============================================
+ Hits          25890    25898       +8     
+ Misses        10177    10170       -7     
+ Partials       1786     1785       -1     
Flag Coverage Δ
android-native 63.76% <ø> (ø)
e2e-ts-android 54.15% <ø> (ø)
e2e-ts-ios 53.51% <ø> (ø)
e2e-ts-macos 49.68% <ø> (ø)
ios-native 68.84% <ø> (+0.07%) ⬆️
ios-ruby 100.00% <ø> (ø)
jest 45.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@russellwheatley russellwheatley changed the title fix(ios): wire add_rncore_dependency for prebuilt RNCore fix(ios): allow non-modular React includes in RNFB podspecs Aug 18, 2026
install_modules_dependencies already calls it on RN 0.84+. Keep the
guarded call on the package template, which does not use that helper.
Move the durable invariants out of the SPM ADR. Live pods do not
double-call add_rncore_dependency; the package template still does.
@russellwheatley
russellwheatley marked this pull request as ready for review August 18, 2026 14:10
Comment thread okf-bundle/ios-rncore-podspec-work-queue.md Outdated
Comment thread okf-bundle/ios-rncore-podspec.md
The durable invariants already live in ios-rncore-podspec.md; the
ephemeral tracker and Linear issue links do not belong on main.
After the tests-macos split both apps bind :8081, so a single mobile
packager cannot serve platform=macos bundles.

@mikehardy mikehardy left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

Went ahead and adopted the two docs suggestions: dropped the closed work-queue, and stripped Linear issue links from the durable docs. I prefer internal issue references not persist on the public repo — they are confusing for external consumers.

Also updated my personal deterministic full-test script (scripts/run-full-tests.sh, used in triage/review) to switch Metro to tests-macos after iOS/Android, now that the macOS e2e app is split out.

@mikehardy mikehardy added the Workflow: Pending Merge Waiting on CI or similar label Aug 18, 2026
@russellwheatley
russellwheatley merged commit dd453ff into main Aug 19, 2026
27 checks passed
@russellwheatley
russellwheatley deleted the ios-podspec-rncore-prebuilt branch August 19, 2026 07:43
@taylorkline

Copy link
Copy Markdown

@mikehardy Would you mind publishing a release with this?

@mikehardy mikehardy removed the Workflow: Pending Merge Waiting on CI or similar label Aug 19, 2026
@mikehardy

Copy link
Copy Markdown
Collaborator

@taylorkline sure - let me see if there's anything else I can batch in to it - but I'll queue up a release for later today my time, cheers

@taylorkline

Copy link
Copy Markdown

I appreciate that

@mikehardy

Copy link
Copy Markdown
Collaborator

v26.3.0 is out on npm now, got SDK bumps for all 3 underlying SDKs as well via #9203 - cheers

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.

3 participants