Created
January 10, 2021 05:43
-
-
Save RealDyllon/4a7d5d2034d3f44e8efa14a624605e66 to your computer and use it in GitHub Desktop.
react-native-firebase iOS Configuration with Expo Bare
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 <Firebase.h> // see: https://rnfirebase.io/#configure-firebase-with-ios-credentials | |
#import "RNFBMessagingModule.h" | |
#import "AppDelegate.h" | |
#import <React/RCTBridge.h> | |
#import <React/RCTBundleURLProvider.h> | |
#import <React/RCTRootView.h> | |
#import <UMCore/UMModuleRegistry.h> | |
#import <UMReactNativeAdapter/UMNativeModulesProxy.h> | |
#import <UMReactNativeAdapter/UMModuleRegistryAdapter.h> | |
#import <EXSplashScreen/EXSplashScreenService.h> | |
#import <UMCore/UMModuleRegistryProvider.h> | |
#if DEBUG | |
#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) NSDictionary *appProperties; // for firebase isHeadless | |
@end | |
@implementation AppDelegate | |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
{ | |
if ([FIRApp defaultApp] == nil) { // see: https://rnfirebase.io/#configure-firebase-with-ios-credentials | |
[FIRApp configure]; | |
} | |
self.appProperties = [RNFBMessagingModule addCustomPropsToUserProps:nil withLaunchOptions:launchOptions]; // for firebase isHeadless | |
#if DEBUG | |
InitializeFlipper(application); | |
#endif | |
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; | |
} | |
- (RCTBridge *)initializeReactNativeApp | |
{ | |
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:self.launchOptions]; | |
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"main" initialProperties:self.appProperties]; | |
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 = [UIViewController new]; | |
rootViewController.view = rootView; | |
self.window.rootViewController = rootViewController; | |
[self.window makeKeyAndVisible]; | |
// EXSplashScreenService *splashScreenService = (EXSplashScreenService *)[UMModuleRegistryProvider getSingletonModuleForClass:[EXSplashScreenService class]]; | |
// [splashScreenService showSplashScreenFor:rootViewController]; | |
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