Я пытаюсь удалить все раскадровки из нашего приложения для iOS, так как они сильно мешают при работе в команде с Git.
Сейчас я устанавливаю начальный ViewController в методе AppDelegate application(_:didFinishLaunchingWithOptions:)
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let launchViewController = LaunchView()
window!.rootViewController = launchViewController
window!.makeKeyAndVisible()
[...]
return true
}
LaunchView - это простой контроллер представления, отвечающий за маршрутизацию пользователя для входа или основного экрана в зависимости от того, вошел ли он в систему.
До этого LaunchView был установлен как начальный в Main.storyboard
.
Я уже удалил эти строки из файла Info.plist
:
<key>UIMainStoryboardFile</key>
<string>Main</string>
Все работает нормально, за исключением случаев, когда мы оставляем приложение в фоновом режиме на пару часов без принудительного выходаэто (я не уверен, сколько времени нужно, чтобы воспроизвести это), а затем вернуть приложение на передний план, отображается полностью черный экран, как если бы корневой контроллер исчез.И мы должны убить приложение и открыть его снова, чтобы использовать его.
Это сводит меня с ума, потому что это действительно трудно воспроизвести, так как если вы оставите приложение в фоновом режиме только на несколько минут, оноработает отлично.Я подозреваю, что это как-то связано с приостановленным приложением, но я не совсем уверен.
Знаете ли вы, где может быть проблема?
Спасибо!
РЕДАКТИРОВАТЬ
Может быть, это как-то связано с проблемой: На LaunchView я отправляю пользователя на главный экран (если он вошел в систему) со следующимкод:
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let rootVC = UIStoryboard.main.rootViewController
if let snapshot = appDelegate.window?.snapshotView(afterScreenUpdates: true) {
rootVC.view.addSubview(snapshot);
appDelegate.window?.rootViewController = rootVC
UIView.transition(with: snapshot, duration: 0.4, options: .transitionCrossDissolve, animations: {
snapshot.layer.opacity = 0;
}, completion: { (status) in
snapshot.removeFromSuperview()
})
}
else {
appDelegate.window?.rootViewController = rootVC
}
Возможно ли, что iOS в какой-то момент удаляет rootViewController?