I have attempted to fix this problem through numerous Stackoverflow questions and Github issues to no avail so I am asking for help.
I have created an ejected (from expo) react-native app. I have generated a splash screen both manually and through expo's automatic splash screen installation. The SplashScreen is linked correctly through XCode (by selecting the SplashScreen.storyboard file as the LaunchScreen).When opening the app through TestFlight on iOS, the first screen that loads is a black screen. Roughly half a second after, my SplashScreen shows. I am not sure why this happens, I have tried reinstalling the app after deleting it, cleaning my build folder before archiving, deleting the storyboard file and reimplementing it and nothing seems to work. I will post my AppDelegate files below in case something is off. Any suggestions are greatly appreciated.
#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>#import <EXScreenOrientation/EXScreenOrientationViewController.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;@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{#ifdef FB_SONARKIT_ENABLED 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: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] init]; 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
#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