В настоящее время я выполняю обновленные рекомендации Apple по разработке мобильного приложения React Native. Зависание для меня было связано с использованием раскадровки для экрана запуска.
Обзор
В рабочей версии приложения используется экран реагирования-родного-спла sh для обработки спла sh экран, который есть только у компании lo go. Я заметил, что последний пакет выпускал обновление, опубликованное год go, поэтому я хотел бы отойти от него и обработать экран spla sh изначально.
Текущее состояние
Я создал раскадровку с Xcode и выронил пакет из репозитория. Я внес несколько изменений в AppDelegate.m и смог отображать экран spla sh в течение заданного периода времени. В конечном итоге я не хочу использовать таймер, я хочу скрыть экран spla sh после завершения всех сетевых вызовов времени запуска.
Решение (?)
После расчесывания через статьи и посты я наткнулся на то, что я считаю решением. Это был пост на r / реагирующий, написанный пару лет назад: https://www.reddit.com/r/reactnative/comments/754y5g/app_flashing_white_after_launch_screen_on_ios_11/
ОП нашел решение и добавил его в комментарии . Идея состоит в том, чтобы отредактировать AppDelegate.m, предоставленный RN, чтобы заменить белый экран тем же .xib, что и экран запуска.
У меня есть .storyboard, а не .xib
В их примере AppDelegate.m немного отличается от приложения.
Я не знаю, как выглядит Objective- C
Итак, мой поиск продолжился, и я нашел следующее сообщение от stackoverflow: React-Native iOS - Как показать контроллер представления после экрана запуска, прежде чем инициализировать реакцию собственного моста (iOS)
Я провел рефакторинг на основе этого поста и смог добраться до моего текущего состояния.
Код
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"LaunchScreen" bundle:[NSBundle mainBundle]];
UIViewController *backgroundView = [storyboard instantiateViewControllerWithIdentifier:@"LaunchViewController"];
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"fakeAppName"
initialProperties:nil];
rootView.backgroundColor = [UIColor clearColor];// changed color to clearColor
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = backgroundView;
[self.window makeKeyAndVisible];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.window.rootViewController = rootViewController;
});
return YES;
}
Вопрос
Как я могу отобразить экран spla sh после раскадровки экрана запуска, чтобы охватить время между нажатием на иконку приложения и завершением загрузки приложения?
Кроме того, я хочу spla sh экран и экран запуска должны быть одинаковыми раскадровками, чтобы это было ss переход от загрузки к домашнему экрану.
Как я уже сказал, я не знаю Objective- C и был немного затруднен с отладкой этого. Может кто-нибудь предложить предложения или указать мне ресурсы, которые могли бы помочь мне здесь?
Самозащита
Я использовал чередующуюся терминологию экрана spla sh и экрана запуска, потому что Apple определяет их как 2 разных вещи. Насколько я понимаю, экран запуска предназначен для загрузки ОС из приложения, а экран spla sh предназначен для начальной загрузки в приложение.
Я также видел довольно много сильных мнений относительно экранов spla sh. Приложение имеет начальные сетевые вызовы, которые требуют короткого периода загрузки, поэтому я использую экран spla sh, чтобы покрыть эту загрузку. Я не использую его только ради того, чтобы на вашем лице было больше go.
Я знаком с другим RN-пакетом под названием response-native-bootspla sh. Я стараюсь не использовать пакет все вместе, поэтому я в первую очередь стремлюсь к этому решению.