Created
November 19, 2020 19:12
-
-
Save rodneyrehm/141f1e891f46e74bf1ef26a463c4fa53 to your computer and use it in GitHub Desktop.
AppDelegate - expo-screen-orientation
This file contains hidden or 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 <EXUpdates/EXUpdatesAppController.h> | |
#import <React/RCTBridgeDelegate.h> | |
#import <UIKit/UIKit.h> | |
#import <UMCore/UMAppDelegateWrapper.h> | |
@interface AppDelegate : UMAppDelegateWrapper <RCTBridgeDelegate, EXUpdatesAppControllerDelegate> | |
@end |
This file contains hidden or 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" | |
#import <React/RCTBridge.h> | |
#import <React/RCTBundleURLProvider.h> | |
#import <React/RCTRootView.h> | |
// react-native-firebase for push-notifications -> | |
#import <Firebase.h> | |
// react-native-firebase for push-notifications -| | |
#import <EXScreenOrientation/EXScreenOrientationViewController.h> | |
#import <UMCore/UMModuleRegistry.h> | |
#import <UMReactNativeAdapter/UMNativeModulesProxy.h> | |
#import <UMReactNativeAdapter/UMModuleRegistryAdapter.h> | |
#import <EXSplashScreen/EXSplashScreenService.h> | |
#import <UMCore/UMModuleRegistryProvider.h> | |
#import <React/RCTLinkingManager.h> | |
#ifdef FB_SONARKIT_ENABLED | |
#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 | |
@interface AppDelegate () <RCTBridgeDelegate> | |
@property (nonatomic, strong) UMModuleRegistryAdapter *moduleRegistryAdapter; | |
@property (nonatomic, strong) NSDictionary *launchOptions; | |
@property (nonatomic, strong) UIWindow *window; | |
@end | |
@implementation AppDelegate | |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
{ | |
#ifdef FB_SONARKIT_ENABLED | |
InitializeFlipper(application); | |
#endif | |
// react-native-firebase for push-notifications -> | |
if ([FIRApp defaultApp] == nil) { | |
[FIRApp configure]; | |
} | |
// react-native-firebase for push-notifications -| | |
self.moduleRegistryAdapter = [[UMModuleRegistryAdapter alloc] initWithModuleRegistryProvider:[[UMModuleRegistryProvider alloc] init]]; | |
self.launchOptions = launchOptions; | |
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |
#ifdef DEBUG | |
[self initializeReactNativeApp]; | |
#else | |
EXUpdatesAppController *controller = [EXUpdatesAppController sharedInstance]; | |
controller.delegate = self; | |
[controller startAndShowLaunchScreen:self.window]; | |
#endif | |
[super application:application didFinishLaunchingWithOptions:launchOptions]; | |
return YES; | |
} | |
- (BOOL)application:(UIApplication *)application | |
openURL:(NSURL *)url | |
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options | |
{ | |
return [RCTLinkingManager application:application openURL:url options:options]; | |
} | |
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity | |
restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler | |
{ | |
return [RCTLinkingManager application:application | |
continueUserActivity:userActivity | |
restorationHandler:restorationHandler]; | |
} | |
- (RCTBridge *)initializeReactNativeApp | |
{ | |
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:self.launchOptions]; | |
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"main" initialProperties:nil]; | |
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; | |
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; | |
UIViewController *rootViewController = [[EXScreenOrientationViewController alloc] initWithDefaultScreenOrientationMask:UIInterfaceOrientationMaskPortrait]; | |
rootViewController.view = rootView; | |
self.window.rootViewController = rootViewController; | |
[self.window makeKeyAndVisible]; | |
return bridge; | |
} | |
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge | |
{ | |
NSArray<id<RCTBridgeModule>> *extraModules = [_moduleRegistryAdapter extraModulesForBridge:bridge]; | |
// If you'd like to export some custom RCTBridgeModules that are not Expo modules, add them here! | |
return extraModules; | |
} | |
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { | |
#ifdef DEBUG | |
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; | |
#else | |
return [[EXUpdatesAppController sharedInstance] launchAssetUrl]; | |
#endif | |
} | |
- (void)appController:(EXUpdatesAppController *)appController didStartWithSuccess:(BOOL)success { | |
appController.bridge = [self initializeReactNativeApp]; | |
EXSplashScreenService *splashScreenService = (EXSplashScreenService *)[UMModuleRegistryProvider getSingletonModuleForClass:[EXSplashScreenService class]]; | |
[splashScreenService showSplashScreenFor:self.window.rootViewController]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment