// Copyright 2018-present 650 Industries. All rights reserved. #import #import #import #import // Allows non-umbrella since it's coming from React-RCTFabric #import // Allows non-umbrella because the header is not inside a clang module @implementation EXAppDelegateWrapper { EXExpoAppDelegate *_expoAppDelegate; } - (instancetype)init { if (self = [super init]) { _expoAppDelegate = [EXExpoAppDelegate new]; } return self; } // This needs to be implemented, otherwise forwarding won't be called. // When the app starts, `UIApplication` uses it to check beforehand // which `UIApplicationDelegate` selectors are implemented. - (BOOL)respondsToSelector:(SEL)selector { return [super respondsToSelector:selector] || [_expoAppDelegate respondsToSelector:selector]; } // Forwards all invocations to `ExpoAppDelegate` object. - (id)forwardingTargetForSelector:(SEL)selector { return _expoAppDelegate; } #pragma mark - UIApplicationDelegate // Make sure to override all necessary methods from `RCTAppDelegate` here, explicitly forwarding everything to `_expoAppDelegate`. // `forwardingTargetForSelector` works only for methods that are not specified in this and `RCTAppDelegate` classes. #if !TARGET_OS_OSX - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return [_expoAppDelegate application:application didFinishLaunchingWithOptions:launchOptions]; } - (void)applicationDidBecomeActive:(UIApplication *)application { return [_expoAppDelegate applicationDidBecomeActive:application]; } #else - (void)applicationDidFinishLaunching:(NSNotification *)notification { return [_expoAppDelegate applicationDidFinishLaunching:notification]; } - (void)applicationDidBecomeActive:(NSNotification *)notification { return [_expoAppDelegate applicationDidBecomeActive:notification]; } #endif - (UIViewController *)createRootViewController { return [_expoAppDelegate.factory.delegate createRootViewController]; } - (void)customizeRootView:(UIView *)rootView { [_expoAppDelegate.factory.delegate customizeRootView:rootView]; } #pragma mark - RCTComponentViewFactoryComponentProvider - (NSDictionary> *)thirdPartyFabricComponents { return self.dependencyProvider.thirdPartyFabricComponents; } #pragma mark - RCTHostDelegate - (void)hostDidStart:(RCTHost *)host { } - (void)host:(RCTHost *)host didReceiveJSErrorStack:(NSArray *> *)stack message:(NSString *)message exceptionId:(NSUInteger)exceptionId isFatal:(BOOL)isFatal { } - (id)getModuleInstanceFromClass:(Class)moduleClass { return [_expoAppDelegate.factory.delegate getModuleInstanceFromClass:moduleClass]; } - (Class)getModuleClassFromName:(const char *)name { return [_expoAppDelegate.factory.delegate getModuleClassFromName:name]; } #pragma mark - Helpers + (void)customizeRootView:(nonnull UIView *)rootView byAppDelegate:(nonnull RCTAppDelegate *)appDelegate { [appDelegate customizeRootView:(RCTRootView *)rootView]; } @end