-
-
Save brentvatne/9095359f1c47e1099a60ee238ff7d34e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Foundation/Foundation.h> | |
#import <React/RCTBridgeDelegate.h> | |
#import <UIKit/UIKit.h> | |
#import <Expo/Expo.h> | |
@interface AppDelegate : EXAppDelegateWrapper <RCTBridgeDelegate> | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "AppDelegate.h" | |
#if defined(EX_DEV_MENU_ENABLED) | |
@import EXDevMenu; | |
#endif | |
#if defined(EX_DEV_LAUNCHER_ENABLED) | |
#include <EXDevLauncher/EXDevLauncherController.h> | |
#import <EXUpdates/EXUpdatesDevLauncherController.h> | |
#endif | |
#import <React/RCTBridge.h> | |
#import <React/RCTBundleURLProvider.h> | |
#import <React/RCTRootView.h> | |
#import <React/RCTLinkingManager.h> | |
#import <React/RCTConvert.h> | |
#if defined(FB_SONARKIT_ENABLED) && __has_include(<FlipperKit/FlipperClient.h>) | |
#import <FlipperKit/FlipperClient.h> | |
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h> | |
#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h> | |
#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h> | |
#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h> | |
#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h> | |
static void InitializeFlipper(UIApplication *application) { | |
FlipperClient *client = [FlipperClient sharedClient]; | |
SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; | |
[client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; | |
[client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; | |
[client addPlugin:[FlipperKitReactPlugin new]]; | |
[client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; | |
[client start]; | |
} | |
#endif | |
@implementation AppDelegate | |
- (RCTBridge *)initializeReactNativeApp:(NSDictionary *)launchOptions | |
{ | |
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; | |
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"main" initialProperties:nil]; | |
id rootViewBackgroundColor = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"RCTRootViewBackgroundColor"]; | |
if (rootViewBackgroundColor != nil) { | |
rootView.backgroundColor = [RCTConvert UIColor:rootViewBackgroundColor]; | |
} else { | |
rootView.backgroundColor = [UIColor whiteColor]; | |
} | |
UIViewController *rootViewController = [UIViewController new]; | |
rootViewController.view = rootView; | |
self.window.rootViewController = rootViewController; | |
[self.window makeKeyAndVisible]; | |
return bridge; | |
} | |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
{ | |
#if defined(FB_SONARKIT_ENABLED) && __has_include(<FlipperKit/FlipperClient.h>) | |
InitializeFlipper(application); | |
#endif | |
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |
#if defined(EX_DEV_LAUNCHER_ENABLED) | |
EXDevLauncherController *controller = [EXDevLauncherController sharedInstance]; | |
controller.updatesInterface = [EXUpdatesDevLauncherController sharedInstance]; | |
[controller startWithWindow:self.window delegate:(id<EXDevLauncherControllerDelegate>)self launchOptions:launchOptions]; | |
#else | |
[self initializeReactNativeApp:launchOptions]; | |
#endif | |
[super application:application didFinishLaunchingWithOptions:launchOptions]; | |
return YES; | |
} | |
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge | |
{ | |
// If you'd like to export some custom RCTBridgeModules, add them here! | |
return @[]; | |
} | |
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { | |
#ifdef DEBUG | |
#if defined(EX_DEV_LAUNCHER_ENABLED) | |
return [[EXDevLauncherController sharedInstance] sourceUrl]; | |
#else | |
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; | |
#endif | |
#else | |
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; | |
#endif | |
} | |
// Linking API | |
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { | |
#if defined(EX_DEV_LAUNCHER_ENABLED) | |
if ([EXDevLauncherController.sharedInstance onDeepLink:url options:options]) { | |
return true; | |
} | |
#endif | |
return [RCTLinkingManager application:application openURL:url options:options]; | |
} | |
// Universal Links | |
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { | |
return [RCTLinkingManager application:application | |
continueUserActivity:userActivity | |
restorationHandler:restorationHandler]; | |
} | |
@end | |
#if defined(EX_DEV_LAUNCHER_ENABLED) | |
@implementation AppDelegate (EXDevLauncherControllerDelegate) | |
- (void)devLauncherController:(EXDevLauncherController *)developmentClientController | |
didStartWithSuccess:(BOOL)success | |
{ | |
developmentClientController.appBridge = [self initializeReactNativeApp:[EXDevLauncherController.sharedInstance getLaunchOptions]]; | |
} | |
@end | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment