Description
PR #54919 ("Fix backwards-compat for ModuleConstants<::Builder>"), merged Dec 17 2025 and shipped in 0.84.0, introduced a ResultT type alias requirement in Constants::Builder structs. The updated RCTTypedModuleConstants.h now resolves the constants type via Builder::ResultT, but libraries with pre-shipped codegen (generated by older RN versions) don't have this alias.
The catch-22
Regenerating codegen with @react-native/codegen@0.84.0 produces output with completely different JSI structure (no Delegate class, methodMap_ pattern instead, ModuleConstants<Constants> vs ModuleConstants<Builder>) that is incompatible with older RN versions. This means there is no single codegen version that produces output working across both pre-0.84 and 0.84+ apps.
Documentation promise
The codegen-cli documentation states:
No need to worry about Codegen version mismatch between what is used by the app, and what was used during library development.
This implies that includesGeneratedCode provides forwards compatibility — the shipped codegen output should work with future RN versions. The ResultT change in 0.84 breaks this contract.
Impact on library developers
Library developers who need to support a range of RN versions (e.g. 0.70+ through 0.84) are left with no clean solution:
- Option A: Generate with old codegen → broken on 0.84+
- Option B: Generate with 0.84 codegen → broken on older versions
- Option C: Manually patch
using ResultT = Constants; into old-codegen output → works, but fragile, undocumented, and defeats the purpose of includesGeneratedCode
This is especially problematic for SDKs with large enterprise customers who cannot easily migrate React Native versions but still expect support for new SDK features and bug fixes.
Suggested fix
The ResultT resolution in RCTTypedModuleConstants.h should gracefully handle the case where Builder::ResultT doesn't exist (e.g. fall back to checking for Builder::build() return type, or default to the existing Builder behavior). This would maintain true backwards compatibility for libraries with pre-shipped codegen.
Alternatively, the codegen CLI docs should clearly document:
- Which RN versions' codegen output is compatible with which app versions
- That
includesGeneratedCode does NOT guarantee forwards compatibility
- A recommended workaround for library developers supporting multiple RN versions
Steps to reproduce
- Create a TurboModule library with
getConstants() and includesGeneratedCode: true
- Generate codegen with RN 0.77 (or any version < 0.84)
- Create an RN 0.84 app that consumes the library
- Build for iOS with New Architecture enabled
- Observe the
no type named 'ResultT' compilation error
React Native Version
0.84.0
Affected Platforms
Build - iOS (New Architecture)
Related
Steps to reproduce
- Create a library which includes generated codegen artifacts
- Generate the artifacts in any version below 0.84.x, for example 0.77.x
- Import the library in a sample running RN 0.84.x
- Attempt to build on iOS, it will fail due to missing type
React Native Version
0.84.0
Areas
Codegen
Output of npx @react-native-community/cli info
info Fetching system and libraries information...
System:
OS: macOS 15.3
CPU: (10) arm64 Apple M1 Pro
Memory: 131.97 MB / 32.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 24.8.0
path: /Users/konradgapinski/.asdf/installs/nodejs/24.8.0/bin/node
Yarn: Not Found
npm:
version: 11.6.0
path: /Users/konradgapinski/.asdf/plugins/nodejs/shims/npm
Watchman: Not Found
Managers:
CocoaPods:
version: 1.16.2
path: /Users/konradgapinski/.asdf/shims/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 24.2
- iOS 18.2
- macOS 15.2
- tvOS 18.2
- visionOS 2.2
- watchOS 11.2
Android SDK:
API Levels:
- "27"
- "28"
- "29"
- "30"
- "31"
- "32"
- "33"
- "34"
- "35"
- "36"
Build Tools:
- 30.0.2
- 30.0.3
- 32.0.0
- 33.0.0
- 33.0.1
- 33.0.2
- 33.0.3
- 34.0.0
- 35.0.0
- 36.0.0
- 36.1.0
System Images:
- android-34 | Google APIs ARM 64 v8a
Android NDK: Not Found
IDEs:
Android Studio: 2025.2 AI-252.25557.131.2521.14432022
Xcode:
version: 16.2/16C5032a
path: /usr/bin/xcodebuild
Languages:
Java:
version: 21.0.9
path: /usr/bin/javac
Ruby:
version: 3.2.1
path: /Users/konradgapinski/.asdf/shims/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.1.0
wanted: 20.1.0
react:
installed: 19.2.3
wanted: 19.2.3
react-native:
installed: 0.84.0
wanted: 0.84.0
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: true
newArchEnabled: true
Stacktrace or Logs
Showing Recent Errors Only
CompileC /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/Objects-normal/arm64/ScanditDataCaptureCore-f2d19fb949f3dc68ad8bf1fdb06dc3e3.o /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/Sources/ScanditDataCaptureCore.mm normal arm64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'scandit-react-native-datacapture-core' from project 'Pods')
cd /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods
/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/../../node_modules/react-native/scripts/xcode/ccache-clang.sh -x objective-c++ -target arm64-apple-ios15.1 -fmessage-length\=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit\=0 -fno-color-diagnostics -std\=c++20 -stdlib\=libc++ -fobjc-arc -fmodules -fmodules-cache-path\=/Users/konradgapinski/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -fmodules-prune-interval\=86400 -fmodules-prune-after\=345600 -fbuild-session-file\=/Users/konradgapinski/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -fmodules-validate-once-per-build-session -Wnon-modular-include-in-framework-module -Werror\=non-modular-include-in-framework-module -Wno-trigraphs -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -fpascal-strings -O0 -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror\=return-type -Wdocumentation -Wunreachable-code -Wno-implicit-atomic-properties -Werror\=deprecated-objc-isa-usage -Wno-objc-interface-ivars -Werror\=objc-root-class -Wno-arc-repeated-use-of-weak -Wimplicit-retain-self -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wdeprecated-implementations -Wno-c++11-extensions -Wno-implicit-fallthrough -DPOD_CONFIGURATION_DEBUG\=1 -DDEBUG\=1 -DCOCOAPODS\=1 -DOBJC_OLD_DISPATCH_PROTOTYPES\=0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.2.sdk -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -Winvalid-offsetof -g -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -Wunguarded-availability -index-store-path /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Index.noindex/DataStore -iquote /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/scandit-react-native-datacapture-core-generated-files.hmap -I/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/scandit-react-native-datacapture-core-own-target-headers.hmap -I/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/scandit-react-native-datacapture-core-all-non-framework-target-headers.hmap -ivfsoverlay /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/Pods-8699adb1dd336b26511df848a716bd42-VFS-iphoneos/all-product-headers.yaml -iquote /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/scandit-react-native-datacapture-core-project-headers.hmap -I/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/scandit-react-native-datacapture-core/include -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Private -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Private/scandit-react-native-datacapture-core -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/FBLazyVector -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/RCTRequired -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/RCTSwiftUIWrapper -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/RCTTypeSafety -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-Core -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-Core-prebuilt -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-CoreModules -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-Fabric -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-FabricComponents -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-FabricImage -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-ImageManager -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-Mapbuffer -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-NativeModulesApple -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RCTAnimation -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RCTBlob -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RCTFBReactNativeSpec -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RCTFabric -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RCTImage -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RCTRuntime -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RCTText -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RuntimeApple -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RuntimeCore -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-RuntimeHermes -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-callinvoker -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-cxxreact -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-debug -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-defaultsnativemodule -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-domnativemodule -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-featureflags -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-featureflagsnativemodule -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-graphics -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-hermes -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-idlecallbacksnativemodule -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-intersectionobservernativemodule -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jserrorhandler -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jsi -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jsiexecutor -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jsinspector -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jsinspectorcdp -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jsinspectornetwork -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jsinspectortracing -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-jsitooling -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-logger -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-microtasksnativemodule -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-networking -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-oscompat -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-perflogger -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-performancecdpmetrics -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-performancetimeline -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-rendererconsistency -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-renderercss -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-rendererdebug -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-runtimeexecutor -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-runtimescheduler -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-timing -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-utils -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/React-webperformancenativemodule -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/ReactCodegen -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/ReactCommon -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/ReactNativeDependencies -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/Yoga -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/hermes-engine -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/scandit-datacapture-frameworks-core -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/scandit-react-native-datacapture-core -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/generated -I/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Private/Yoga -I/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/DerivedSources-normal/arm64 -I/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/DerivedSources/arm64 -I/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/DerivedSources -F/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/scandit-react-native-datacapture-core -F/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/shared/ios/scandit-datacapture-frameworks-core/Frameworks -F/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/React-Core-prebuilt -F/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/ReactNativeDependencies/framework/packages/react-native -F/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/hermes-engine/destroot/Library/Frameworks/universal -F/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/React-Core-prebuilt -F/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/ReactNativeDependencies -F/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/hermes-engine/Pre-built -F/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/XCFrameworkIntermediates/scandit-datacapture-frameworks-core -DRCT_REMOVE_LEGACY_ARCH\=1 -fmodule-map-file\=/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/RCTSwiftUI/RCTSwiftUI.modulemap -fmodule-map-file\=/Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Products/Debug-iphoneos/scandit-datacapture-frameworks-core/ScanditFrameworksCore.modulemap -fmodule-map-file\=/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/ReactCodegen/ReactCodegen.modulemap -DRCT_REMOVE_LEGACY_ARCH\=1 -DRCT_NEW_ARCH_ENABLED\=1 -DRCT_NEW_ARCH_ENABLED\=1 -w -Xanalyzer -analyzer-disable-all-checks -include /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Target\ Support\ Files/scandit-react-native-datacapture-core/scandit-react-native-datacapture-core-prefix.pch -MMD -MT dependencies -MF /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/Objects-normal/arm64/ScanditDataCaptureCore-f2d19fb949f3dc68ad8bf1fdb06dc3e3.d --serialize-diagnostics /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/Objects-normal/arm64/ScanditDataCaptureCore-f2d19fb949f3dc68ad8bf1fdb06dc3e3.dia -c /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/Sources/ScanditDataCaptureCore.mm -o /Users/konradgapinski/Library/Developer/Xcode/DerivedData/DebugApp-aqezihaevrrbhcgvbvgonkjjisow/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/scandit-react-native-datacapture-core.build/Objects-normal/arm64/ScanditDataCaptureCore-f2d19fb949f3dc68ad8bf1fdb06dc3e3.o
In file included from /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/Sources/ScanditDataCaptureCore.mm:9:
In file included from /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/Sources/ScanditDataCaptureCore.h:16:
In file included from /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/generated/ScanditReactNativeDatacaptureCoreSpec/ScanditReactNativeDatacaptureCoreSpec.h:25:
/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/RCTTypeSafety/RCTTypeSafety/RCTTypedModuleConstants.h:62:28: error: no type named 'ResultT' in 'JS::NativeScanditDataCaptureCore::Constants::Builder'
62 | using type = typename T::ResultT;
| ~~~~~~~~~~~~^~~~~~~
/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/RCTTypeSafety/RCTTypeSafety/RCTTypedModuleConstants.h:73:1: note: in instantiation of template class 'facebook::react::detail::ResolveConstantsType<JS::NativeScanditDataCaptureCore::Constants::Builder>' requested here
73 | using ModuleConstants = _RCTTypedModuleConstants<void (^)(typename detail::ResolveConstantsType<T>::type)> *;
| ^
In file included from /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/Sources/ScanditDataCaptureCore.mm:9:
In file included from /Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/Sources/ScanditDataCaptureCore.h:16:
/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/node_modules/scandit-react-native-datacapture-core/ios/generated/ScanditReactNativeDatacaptureCoreSpec/ScanditReactNativeDatacaptureCoreSpec.h:73:21: note: in instantiation of template type alias 'ModuleConstants' requested here
73 | - (facebook::react::ModuleConstants<JS::NativeScanditDataCaptureCore::Constants::Builder>)constantsToExport;
| ^
1 error generated.
/Users/konradgapinski/worktrees/SDC-29924/data-capture-sdk/frameworks/react-native/compatibility-check/latest/new-arch/DebugApp/ios/Pods/Headers/Public/RCTTypeSafety/RCTTypeSafety/RCTTypedModuleConstants.h:62:28: No type named 'ResultT' in 'JS::NativeScanditDataCaptureCore::Constants::Builder'
MANDATORY Reproducer
https://github.com/konradgapinski/RN-0.84.x-Codegen-Breaking-Changes#
Screenshots and Videos
No response
Description
PR #54919 ("Fix backwards-compat for ModuleConstants<::Builder>"), merged Dec 17 2025 and shipped in 0.84.0, introduced a
ResultTtype alias requirement inConstants::Builderstructs. The updatedRCTTypedModuleConstants.hnow resolves the constants type viaBuilder::ResultT, but libraries with pre-shipped codegen (generated by older RN versions) don't have this alias.The catch-22
Regenerating codegen with
@react-native/codegen@0.84.0produces output with completely different JSI structure (noDelegateclass,methodMap_pattern instead,ModuleConstants<Constants>vsModuleConstants<Builder>) that is incompatible with older RN versions. This means there is no single codegen version that produces output working across both pre-0.84 and 0.84+ apps.Documentation promise
The codegen-cli documentation states:
This implies that
includesGeneratedCodeprovides forwards compatibility — the shipped codegen output should work with future RN versions. TheResultTchange in 0.84 breaks this contract.Impact on library developers
Library developers who need to support a range of RN versions (e.g. 0.70+ through 0.84) are left with no clean solution:
using ResultT = Constants;into old-codegen output → works, but fragile, undocumented, and defeats the purpose ofincludesGeneratedCodeThis is especially problematic for SDKs with large enterprise customers who cannot easily migrate React Native versions but still expect support for new SDK features and bug fixes.
Suggested fix
The
ResultTresolution inRCTTypedModuleConstants.hshould gracefully handle the case whereBuilder::ResultTdoesn't exist (e.g. fall back to checking forBuilder::build()return type, or default to the existingBuilderbehavior). This would maintain true backwards compatibility for libraries with pre-shipped codegen.Alternatively, the codegen CLI docs should clearly document:
includesGeneratedCodedoes NOT guarantee forwards compatibilitySteps to reproduce
getConstants()andincludesGeneratedCode: trueno type named 'ResultT'compilation errorReact Native Version
0.84.0
Affected Platforms
Build - iOS (New Architecture)
Related
ResultTrequirementincludesGeneratedCode: true#48621 —includesGeneratedCodedoesn't prevent app-level codegen parsingSteps to reproduce
React Native Version
0.84.0
Areas
Codegen
Output of
npx @react-native-community/cli infoStacktrace or Logs
MANDATORY Reproducer
https://github.com/konradgapinski/RN-0.84.x-Codegen-Breaking-Changes#
Screenshots and Videos
No response