Skip to content

Conversation

burakharun
Copy link

Problem

This package claimed to support React Native's New Architecture from version 4.3.0, but was missing proper TurboModule implementation for the latest React Native and Expo versions with New Architecture enabled by default.

Solution

  • Added proper TurboModule protocol implementation
  • Included RNDatePickerSpecs.h for New Architecture builds
  • Implemented required getConstants and getTurboModule methods
  • Added requiresMainQueueSetup method
  • Ensured compatibility with both Old and New Architecture using conditional compilation

Testing

  • Tested on React Native 0.79.6 and Expo 53.0.22
  • Works with both New and Old Architecture

Impact

Fixes crashes and compatibility issues for users running latest React Native and Expo versions.

- Add proper TurboModule protocol implementation
- Include RNDatePickerSpecs.h for New Architecture builds
- Implement required getConstants and getTurboModule methods
- Add requiresMainQueueSetup method
- Ensure compatibility with both Old and New Architecture using conditional compilation

Fixes compatibility issues with React Native and Expo versions that have New Architecture enabled by default. Tested on React Native 0.79.6 and Expo 53.0.22.
@yittoo
Copy link

yittoo commented Sep 1, 2025

On non-expo react-native 0.81.1, and date picker 5.0.13, this seems good. cheers

@djMax
Copy link

djMax commented Sep 8, 2025

This change is required for modern versions of Expo. Any chance of a merge? Pinning to the fork is less than idea.

@dannyDotDev
Copy link

Seconding that! Would <3 to see this merged soon so we can unblock Expo 53 update

@tincorvia
Copy link

I have tested this branch on react native 0.81.4(not using expo) and it appears to be working properly.

@tsvetlin
Copy link

I have tested this change with React Native 0.81.4 and Expo SDK 54.
App is not crashing anymore and the library works correctly.

@lishaan
Copy link

lishaan commented Oct 2, 2025

I've tested with the following versions:

expo: 54.0.12
react-native: 0.81.4
react-native-date-picker: 5.0.13

Project is able to build, and the component is also working on both iOS and Android. However on iOS, we're getting the following error:

Error Report

Module provider RNDatePickerManager does not conform to RCTModuleProvider

__37+[RCTModuleProviders moduleProviders]_block_invoke
RCTModuleProviders.mm:39
_dispatch_client_callout
_dispatch_once_callout
+[RCTModuleProviders moduleProviders]
-[RCTAppDependencyProvider moduleProviders]
-[RCTDefaultReactNativeFactoryDelegate getModuleProvider:]
-[RCTReactNativeFactory getModuleProvider:]
-[RCTInstance getModuleProvider:]
-[RCTTurboModuleManager _moduleProviderForName:]
-[RCTTurboModuleManager provideTurboModule:runtime:]
-[RCTTurboModuleManager installJSBindings:]::$_0::operator()(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&) const
decltype(std::declval<-[RCTTurboModuleManager installJSBindings:]::$_0&>()(std::declval<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&>())) std::__1::__invoke[abi:de180100]<-[RCTTurboModuleManager installJSBindings:]::$_0&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&>(-[RCTTurboModuleManager installJSBindings:]::$_0&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)
std::__1::shared_ptrfacebook::react::TurboModule std::__1::__invoke_void_return_wrapper<std::__1::shared_ptrfacebook::react::TurboModule, false>::__call[abi:de180100]<-[RCTTurboModuleManager installJSBindings:]::$_0&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&>(-[RCTTurboModuleManager installJSBindings:]::$_0&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)
std::__1::__function::__alloc_func<-[RCTTurboModuleManager installJSBindings:]::$_0, std::__1::allocator<-[RCTTurboModuleManager installJSBindings:]::$_0>, std::__1::shared_ptrfacebook::react::TurboModule (std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)>::operator()[abi:de180100](std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)
std::__1::__function::__func<-[RCTTurboModuleManager installJSBindings:]::$_0, std::__1::allocator<-[RCTTurboModuleManager installJSBindings:]::$_0>, std::__1::shared_ptrfacebook::react::TurboModule (std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)>::operator()(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)
std::__1::__function::__value_func<std::__1::shared_ptrfacebook::react::TurboModule (std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)>::operator()[abi:de180100](std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&) const
std::__1::function<std::__1::shared_ptrfacebook::react::TurboModule (std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)>::operator()(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&) const
facebook::react::TurboModuleBinding::getModule(facebook::jsi::Runtime&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&) const
facebook::react::BridgelessNativeModuleProxy::get(facebook::jsi::Runtime&, facebook::jsi::PropNameID const&)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::JsiProxy::get(hermes::vm::SymbolID)
hermes::vm::JSObject::getComputedWithReceiver_RJS(hermes::vm::Handlehermes::vm::JSObject, hermes::vm::Runtime&, hermes::vm::Handlehermes::vm::HermesValue, hermes::vm::Handlehermes::vm::HermesValue)
hermes::vm::CallResult<hermes::vm::HermesValue, (hermes::vm::detail::CallResultSpecialize)2> hermes::vm::Interpreter::interpretFunction<false, false>(hermes::vm::Runtime&, hermes::vm::InterpreterState&)
hermes::vm::Runtime::interpretFunctionImpl(hermes::vm::CodeBlock*)
hermes::vm::Runtime::runBytecode(std::__1::shared_ptrhermes::hbc::BCProviderBase&&, hermes::vm::RuntimeModuleFlags, llvh::StringRef, hermes::vm::Handlehermes::vm::Environment, hermes::vm::Handlehermes::vm::HermesValue)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::evaluatePreparedJavaScript(std::__1::shared_ptr<facebook::jsi::PreparedJavaScript const> const&)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::evaluateJavaScriptWithSourceMap(std::__1::shared_ptr<facebook::jsi::Buffer const> const&, std::__1::shared_ptr<facebook::jsi::Buffer const> const&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)
facebook::hermes::(anonymous namespace)::HermesRuntimeImpl::evaluateJavaScript(std::__1::shared_ptr<facebook::jsi::Buffer const> const&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&)
facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0::operator()(facebook::jsi::Runtime&) const
decltype(std::declval<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&>()(std::declvalfacebook::jsi::Runtime&())) std::__1::__invoke[abi:de180100]<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&>(facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&)
void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:de180100]<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&>(facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0&, facebook::jsi::Runtime&)
std::__1::__function::__alloc_func<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0, std::__1::allocator<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0>, void (facebook::jsi::Runtime&)>::operator()abi:de180100
std::__1::__function::__func<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0, std::__1::allocator<facebook::react::ReactInstance::loadScript(std::__1::unique_ptr<facebook::react::JSBigString const, std::__1::default_delete<facebook::react::JSBigString const>>, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator> const&, std::__1::function<void (facebook::jsi::Runtime&)>&&, std::__1::function<void (facebook::jsi::Runtime&)>&&)::$_0>, void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&)
std::__1::__function::__value_func<void (facebook::jsi::Runtime&)>::operator()abi:de180100 const
std::__1::function<void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&) const
facebook::react::Task::execute(facebook::jsi::Runtime&, bool)
facebook::react::RuntimeScheduler_Modern::executeTask(facebook::jsi::Runtime&, facebook::react::Task&, bool) const
facebook::react::RuntimeScheduler_Modern::runEventLoopTick(facebook::jsi::Runtime&, facebook::react::Task&)
facebook::react::RuntimeScheduler_Modern::runEventLoop(facebook::jsi::Runtime&)
facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0::operator()(facebook::jsi::Runtime&) const
decltype(std::declvalfacebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&()(std::declvalfacebook::jsi::Runtime&())) std::__1::__invoke[abi:de180100]<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&>(facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&)
void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:de180100]<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&>(facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0&, facebook::jsi::Runtime&)
std::__1::__function::__alloc_func<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0, std::__1::allocatorfacebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0, void (facebook::jsi::Runtime&)>::operator()abi:de180100
std::__1::__function::__func<facebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0, std::__1::allocatorfacebook::react::RuntimeScheduler_Modern::scheduleEventLoop()::$_0, void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&)
std::__1::__function::__value_func<void (facebook::jsi::Runtime&)>::operator()abi:de180100 const
std::__1::function<void (facebook::jsi::Runtime&)>::operator()(facebook::jsi::Runtime&) const
_ZZZN8facebook5react13ReactInstanceC1ENSt3__110unique_ptrINS0_9JSRuntimeENS2_14default_deleteIS4_EEEENS2_10shared_ptrINS0_18MessageQueueThreadEEENS8_INS0_12TimerManagerEEENS2_8functionIFvRNS_3jsi7RuntimeERKNS0_14JsErrorHandler14ProcessedErrorEEEEPNS0_18jsinspector_modern10HostTargetEENK3$_0clINSD_IFvSG_EEEEEDaT_ENKUlvE_clEv
_ZNSt3__18__invokeB8de180100IRZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS2_9JSRuntimeENS_14default_deleteIS5_EEEENS_10shared_ptrINS2_18MessageQueueThreadEEENS9_INS2_12TimerManagerEEENS_8functionIFvRNS1_3jsi7RuntimeERKNS2_14JsErrorHandler14ProcessedErrorEEEEPNS2_18jsinspector_modern10HostTargetEENK3$0clINSE_IFvSH_EEEEEDaT_EUlvE_JEEEDTclclsr3stdE7declvalISW_EEspclsr3stdE7declvalIT0_EEEEOSW_DpOSZ
_ZNSt3__128__invoke_void_return_wrapperIvLb1EE6__callB8de180100IJRZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS4_9JSRuntimeENS_14default_deleteIS7_EEEENS_10shared_ptrINS4_18MessageQueueThreadEEENSB_INS4_12TimerManagerEEENS_8functionIFvRNS3_3jsi7RuntimeERKNS4_14JsErrorHandler14ProcessedErrorEEEEPNS4_18jsinspector_modern10HostTargetEENK3$0clINSG_IFvSJ_EEEEEDaT_EUlvE_EEEvDpOT
_ZNSt3__110__function12__alloc_funcIZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS3_9JSRuntimeENS_14default_deleteIS6_EEEENS_10shared_ptrINS3_18MessageQueueThreadEEENSA_INS3_12TimerManagerEEENS_8functionIFvRNS2_3jsi7RuntimeERKNS3_14JsErrorHandler14ProcessedErrorEEEEPNS3_18jsinspector_modern10HostTargetEENK3$_0clINSF_IFvSI_EEEEEDaT_EUlvE_NS_9allocatorISY_EEFvvEEclB8de180100Ev
_ZNSt3__110__function6__funcIZZN8facebook5react13ReactInstanceC1ENS_10unique_ptrINS3_9JSRuntimeENS_14default_deleteIS6_EEEENS_10shared_ptrINS3_18MessageQueueThreadEEENSA_INS3_12TimerManagerEEENS_8functionIFvRNS2_3jsi7RuntimeERKNS3_14JsErrorHandler14ProcessedErrorEEEEPNS3_18jsinspector_modern10HostTargetEENK3$_0clINSF_IFvSI_EEEEEDaT_EUlvE_NS_9allocatorISY_EEFvvEEclEv
std::__1::__function::__value_func<void ()>::operator()abi:de180100 const
std::__1::function<void ()>::operator()() const
facebook::react::tryAndReturnError(std::__1::function<void ()> const&)
facebook::react::RCTMessageThread::tryFunc(std::__1::function<void ()> const&)
facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0::operator()() const
decltype(std::declval<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&>()()) std::__1::__invoke[abi:de180100]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&>(facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&)
void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:de180100]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&>(facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0&)
std::__1::__function::__alloc_func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0>, void ()>::operator()abi:de180100
std::__1::__function::__func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_0>, void ()>::operator()()
std::__1::__function::__value_func<void ()>::operator()abi:de180100 const
std::__1::function<void ()>::operator()() const
invocation function for block in facebook::react::RCTMessageThread::runAsync(std::__1::function<void ()>)
CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK
__CFRunLoopDoBlocks
__CFRunLoopRun
CFRunLoopRunSpecific
+[RCTJSThreadManager runRunLoop]
NSThread__start
_pthread_start
thread_start

Project is fine after dismissing the error.

@AZ604
Copy link

AZ604 commented Oct 2, 2025

react-native: 0.81.4

Confirming what @lishaan has stated. error appears on IOS only, android is fine

@chrisforerunner
Copy link

I applied this as a patch to 5.0.13 and it worked to stop the warning, but when attempting to open a date picker on iOS < 26, a new error shows up for me:

Simulator Screenshot - iPhone 16e - 2025-10-02 at 20 38 48 Simulator Screenshot - iPhone 16e - 2025-10-02 at 20 38 55

iOS 26 seems to work fine for some reason I can't determine.

@AZ604
Copy link

AZ604 commented Oct 5, 2025

yes, for now downgrading to 5.0.12 solves the problem

@chiefchief
Copy link

Works fine for me
"react-native": "0.81.4",
"react-native-date-picker": "^5.0.13",

ios 26 and 18.5-

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.

10 participants