diff --git a/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost+Internal.h b/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost+Internal.h index 7d3f5cf3e0..3c53555b25 100644 --- a/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost+Internal.h +++ b/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost+Internal.h @@ -7,8 +7,11 @@ #import "RCTHost.h" +typedef NSURL * (^RCTHostBundleURLProvider)(void); + @interface RCTHost (Internal) - (void)registerSegmentWithId:(NSNumber *)segmentId path:(NSString *)path; +- (void)setBundleURLProvider:(RCTHostBundleURLProvider)bundleURLProvider; @end diff --git a/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.h b/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.h index 50e2e0bf16..ffb2fd64fc 100644 --- a/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.h +++ b/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.h @@ -29,7 +29,6 @@ typedef std::shared_ptr (^RCTHostJSEngineProv @protocol RCTHostDelegate -- (NSURL *)getBundleURL; - (std::shared_ptr)createContextContainer; - (void)host:(RCTHost *)host diff --git a/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.mm b/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.mm index 7ab1b72146..457f59e17f 100644 --- a/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.mm +++ b/packages/react-native/ReactCommon/react/bridgeless/platform/ios/Core/RCTHost.mm @@ -30,6 +30,7 @@ using namespace facebook::react; NSURL *_oldDelegateBundleURL; NSURL *_bundleURL; RCTBundleManager *_bundleManager; + RCTHostBundleURLProvider _bundleURLProvider; facebook::react::ReactInstance::BindingsInstallFunc _bindingsInstallFunc; RCTHostJSEngineProvider _jsEngineProvider; @@ -86,11 +87,11 @@ using namespace facebook::react; auto defaultBundleURLGetter = ^NSURL *() { RCTHost *strongSelf = weakSelf; - if (!strongSelf) { + if (!strongSelf || !strongSelf->_bundleURLProvider) { return nil; } - return [strongSelf->_hostDelegate getBundleURL]; + return strongSelf->_bundleURLProvider(); }; [self _setBundleURL:bundleURL]; @@ -200,7 +201,9 @@ using namespace facebook::react; { [_instance invalidate]; _instance = nil; - [self _setBundleURL:[_hostDelegate getBundleURL]]; + if (_bundleURLProvider) { + [self _setBundleURL:_bundleURLProvider()]; + } // Ensure all attached surfaces are restarted after reload { @@ -265,6 +268,11 @@ using namespace facebook::react; [_instance registerSegmentWithId:segmentId path:path]; } +- (void)setBundleURLProvider:(RCTHostBundleURLProvider)bundleURLProvider +{ + _bundleURLProvider = [bundleURLProvider copy]; +} + #pragma mark - Private - (void)_attachSurface:(RCTFabricSurface *)surface FB_OBJC_DIRECT