Skip to content

Define RN_BUILDING for React Native's own CocoaPods targets - #57858

Open
coado wants to merge 2 commits into
react:mainfrom
coado:export-D115051089
Open

Define RN_BUILDING for React Native's own CocoaPods targets#57858
coado wants to merge 2 commits into
react:mainfrom
coado:export-D115051089

Conversation

@coado

@coado coado commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary:
React Native's public C++ headers are gaining guards from react/cxxstableapi. Those
guards turn a direct include of a fine-grained header into an error for consumers that
opt into the strict API by defining RN_STRICT_API. React Native's own sources keep
including those fine-grained headers directly, so they have to be exempt. The guards
recognise the exemption via RN_BUILDING.

Mark every first-party pod as part of React Native's own build by defining
RN_BUILDING for it, through a new mark_as_react_native_build helper called last in
each spec block

Third-party pods deliberately do NOT get this: they compile their own code against the
public API and must remain subject to the guards. For the same reason the definition
goes into pod_target_xcconfig, which applies to the pod's own target, rather than
user_target_xcconfig, which would leak it to the app.

This change is inert on its own: nothing behaves differently unless a consumer defines
RN_STRICT_API.

Changelog: [Internal]

Differential Revision: D115051089

coado added 2 commits August 6, 2026 07:05
Summary:
`install_modules_dependencies` is the helper every third-party New Architecture library calls from its own podspec, and `update_search_paths` covers the user project and the pod targets that don't go through it. Neither knew about `React-cxxstableapi`.

React Native's public C++ headers are starting to include the shared guard header `<react/cxxstableapi/UmbrellaGuard.h>`. The include is unconditional, so a third-party pod that includes any guarded React Native header has to be able to resolve it. Today it can't: in the default static-library mode `$(PODS_ROOT)/Headers/Public/React-cxxstableapi` is missing from the search path, and under `use_frameworks!` the `React_cxxstableapi.framework/Headers` entry is missing.

Declare the dependency and add the matching framework header search path in both places.

Changelog:
[iOS][Added] - Add a `React-cxxstableapi` dependency to third-party New Architecture pods so they can resolve React Native's C++ API guard headers

Differential Revision: D110052811
Summary:
React Native's public C++ headers are gaining guards from `react/cxxstableapi`. Those
guards turn a direct include of a fine-grained header into an error for consumers that
opt into the strict API by defining `RN_STRICT_API`. React Native's own sources keep
including those fine-grained headers directly, so they have to be exempt. The guards
recognise the exemption via `RN_BUILDING`.

Mark every first-party pod as part of React Native's own build by defining
`RN_BUILDING` for it, through a new `mark_as_react_native_build` helper called last in
each spec block

Third-party pods deliberately do NOT get this: they compile their own code against the
public API and must remain subject to the guards. For the same reason the definition
goes into `pod_target_xcconfig`, which applies to the pod's own target, rather than
`user_target_xcconfig`, which would leak it to the app.

This change is inert on its own: nothing behaves differently unless a consumer defines
`RN_STRICT_API`.

Changelog: [Internal]

Differential Revision: D115051089
@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 Aug 7, 2026
@facebook-github-tools facebook-github-tools Bot added p: Software Mansion Partner: Software Mansion Partner p: Facebook Partner: Facebook labels Aug 7, 2026
@meta-codesync

meta-codesync Bot commented Aug 7, 2026

Copy link
Copy Markdown

@coado has exported this pull request. If you are a Meta employee, you can view the originating Diff in D115051089.

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. meta-exported p: Facebook Partner: Facebook p: Software Mansion Partner: Software Mansion Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant