#import #import #import #if __has_include() // for importing the header from framework, the dash will be transformed to underscore #import #else #import #endif #ifdef RCT_NEW_ARCH_ENABLED #import #import #import #import #import #import #import #import #import @interface DevClientAppDelegate () < RCTTurboModuleManagerDelegate, RCTCxxBridgeDelegate, RCTComponentViewFactoryComponentProvider, RCTContextContainerHandling> { std::shared_ptr _reactNativeConfig; facebook::react::ContextContainer::Shared _contextContainer; std::shared_ptr _runtimeScheduler; } @end #endif @interface RCTAppDelegate (DevClientAppDelegate) - (void)unstable_registerLegacyComponents; @end @implementation DevClientAppDelegate { #if RCT_NEW_ARCH_ENABLED RCTHost *_reactHost; #endif // RCT_NEW_ARCH_ENABLED } #if RCT_NEW_ARCH_ENABLED - (instancetype)init { if (self = [super init]) { _contextContainer = std::make_shared(); _reactNativeConfig = std::make_shared(); _contextContainer->insert("ReactNativeConfig", _reactNativeConfig); } return self; } #endif - (RCTBridge *)createBridgeAndSetAdapterWithLaunchOptions:(NSDictionary * _Nullable)launchOptions { self.bridge = [self createBridgeWithDelegate:self launchOptions:launchOptions]; #ifdef RCT_NEW_ARCH_ENABLED // bridgeless mode is not yet supported in expo-dev-client assert(!self.bridgelessEnabled); self.bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:self.bridge contextContainer:_contextContainer]; self.bridge.surfacePresenter = self.bridgeAdapter.surfacePresenter; [self unstable_registerLegacyComponents]; [RCTComponentViewFactory currentComponentViewFactory].thirdPartyFabricComponentsProvider = self; #endif return self.bridge; } #pragma mark - RCTCxxBridgeDelegate #if RCT_NEW_ARCH_ENABLED - (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge { _runtimeScheduler = std::make_shared(RCTRuntimeExecutorFromBridge(bridge)); std::shared_ptr callInvoker = std::make_shared(_runtimeScheduler); RCTTurboModuleManager *turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge delegate:self jsInvoker:callInvoker]; _contextContainer->erase("RuntimeScheduler"); _contextContainer->insert("RuntimeScheduler", _runtimeScheduler); return RCTAppSetupDefaultJsExecutorFactory(bridge, turboModuleManager, _runtimeScheduler); } #endif // RCT_NEW_ARCH_ENABLED @end