diff options
Diffstat (limited to 'ios/app/AppDelegate.mm')
-rw-r--r-- | ios/app/AppDelegate.mm | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/ios/app/AppDelegate.mm b/ios/app/AppDelegate.mm new file mode 100644 index 000000000..27cde7ef8 --- /dev/null +++ b/ios/app/AppDelegate.mm @@ -0,0 +1,108 @@ +#import "AppDelegate.h" + +#import <React/RCTBridge.h> +#import <React/RCTBundleURLProvider.h> +#import <React/RCTRootView.h> + +#import <React/RCTAppSetupUtils.h> + +#if RCT_NEW_ARCH_ENABLED +#import <React/CoreModulesPlugins.h> +#import <React/RCTCxxBridgeDelegate.h> +#import <React/RCTFabricSurfaceHostingProxyRootView.h> +#import <React/RCTSurfacePresenter.h> +#import <React/RCTSurfacePresenterBridgeAdapter.h> +#import <ReactCommon/RCTTurboModuleManager.h> + +#import <react/config/ReactNativeConfig.h> + +@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate> { + RCTTurboModuleManager *_turboModuleManager; + RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; + std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig; + facebook::react::ContextContainer::Shared _contextContainer; +} +@end +#endif + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + RCTAppSetupPrepareApp(application); + + RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; + +#if RCT_NEW_ARCH_ENABLED + _contextContainer = std::make_shared<facebook::react::ContextContainer const>(); + _reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>(); + _contextContainer->insert("ReactNativeConfig", _reactNativeConfig); + _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer]; + bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; +#endif + + UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"app", nil); + + if (@available(iOS 13.0, *)) { + rootView.backgroundColor = [UIColor systemBackgroundColor]; + } else { + rootView.backgroundColor = [UIColor whiteColor]; + } + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + return YES; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +#if RCT_NEW_ARCH_ENABLED + +#pragma mark - RCTCxxBridgeDelegate + +- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge +{ + _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge + delegate:self + jsInvoker:bridge.jsCallInvoker]; + return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager); +} + +#pragma mark RCTTurboModuleManagerDelegate + +- (Class)getModuleClassFromName:(const char *)name +{ + return RCTCoreModulesClassProvider(name); +} + +- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name + jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker +{ + return nullptr; +} + +- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name + initParams: + (const facebook::react::ObjCTurboModule::InitParams &)params +{ + return nullptr; +} + +- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass +{ + return RCTAppSetupDefaultModuleFromClass(moduleClass); +} + +#endif + +@end |