No momento, estou recebendo uma tela em branco com o Xcode 11, Target iOS 13.0 (o aplicativo funciona bem com todas as versões abaixo do iOS 12.1 a 12.4), quero fazer meu aplicativo funcionar para usuários do iOS acima de 12.1 e também com a versão 13.0 atualmente recebendo a tela em branco, apesar de adicionando o SceneDelegate abaixo ao meu projeto existente e
adicionando arquivo de manifesto do aplicativo
import UIKit
import SwiftUI
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
//guard let _ = (scene as? UIWindowScene) else { return }
let user = UserDefaults.standard.object(forKey: "defaultsuserid")
let userSelfIdent = UserDefaults.standard.object(forKey: "userinitialident")
if let windowScene = scene as? UIWindowScene {
let internalWindow = UIWindow(windowScene: windowScene)
if (user != nil && userSelfIdent != nil){
let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
internalWindow.rootViewController = newViewcontroller
self.window = internalWindow
internalWindow.makeKeyAndVisible()
}else {
guard let _ = (scene as? UIWindowScene) else { return }
}
}
}
A seguir, meu AppDelegate, que está sendo chamado primeiro e executando o didFinishLaunchWithOptions
método. Quero saber como posso fazer essa chamada de método apenas se meu ios de destino for menor que 13.0 e chamar o método SceneDelegate para inicializar meu rootViewController após a 13.0?
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
@available(iOS 13.0, *)
func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
}
@available(iOS 13.0, *)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if (user != nil && userSelfIdent != nil){
let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
self.window?.rootViewController = newViewcontroller
}
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
Thread.sleep(forTimeInterval: 3.0)
UINavigationBar.appearance().barTintColor = UIColor(red:0.08, green:0.23, blue:0.62, alpha:1.0)
if (user != nil && userSelfIdent != nil){
let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
self.window?.rootViewController = newViewcontroller
}
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let defaultUserID = UserDefaults.standard.string(forKey: "defaultUserID")
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
switch (application.applicationState) {
case UIApplicationState.active:
do something
case UIApplicationState.background, UIApplicationState.inactive:
let mainstoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewcontroller = mainstoryboard.instantiateViewController(withIdentifier: "swrevealviewcontroller") as! SWRevealViewController
self.window?.rootViewController = newViewcontroller
}
}
willConnectTo
método de delegação de cena e vá passo a passo. Faz o que você espera?willConnectTo
chamado? Então o que acontece? Chega ao ponto de criar e configurar o controlador de visualização raiz? Novamente, percorra o código com o depurador. Não confie apenas na saída do console.Portanto, as etapas para obter um iOS 13 e uma versão inferior
1) Altere o destino da implantação para o iOS 12.
2) Substitua os métodos do AppDelegate pelo que eles deveriam ter para o desenvolvimento do iOS 12. Adicione também:
3) Remova o SceneDelegate.
4) Remova o manifesto da cena do aplicativo em seu info.plist.
Funcionará no iOS 13 e na versão iOS inferior
fonte
Eu estava com esse problema e finalmente resolvi remover as referências searchDisplayController do storyboard.
fonte
Quando tive um problema semelhante, isso ocorreu porque o modelo de aplicativo único gerado usando o Xcode 11.0 era incompatível com o necessário para um aplicativo criado com o Xcode 11.2.
Então, acabei de criar um novo aplicativo de página única com o Xcode 11.2 e copiei o SceneDelegate gerado no meu projeto antigo, criado com o Xcode 11.0.
Depois disso, a tela em branco desapareceu e minha interface ficou visível mais uma vez.
fonte
Siga estas etapas facilmente
1-) Remover arquivo delegado da cena
2-) Adicione o código abaixo ao AppDelegate.swift
3-) Remova a linha Application manifest manifest do seu arquivo .plist
fonte