Actualmente estoy obteniendo una pantalla en blanco con Xcode 11, Target iOS 13.0 (la aplicación funciona bien con todas las versiones siguientes iOS 12.1 hasta 12.4), quiero hacer que mi aplicación funcione para los usuarios de iOS por encima de 12.1 y también 13.0 actualmente obteniendo pantalla en blanco a pesar de agregando el siguiente SceneDelegate a mi proyecto existente y
Agregar archivo de manifiesto de la aplicación
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 }
}
}
}
El siguiente es mi AppDelegate que se llama primero y ejecuta el didFinishLaunchWithOptions
método. Quiero saber cómo puedo hacer que este método llame solo si mi Target ios es inferior a 13.0 y llamar al método SceneDelegate para inicializar mi rootViewController después de 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 delegado de escena y vaya paso a paso. ¿Hace lo que esperas?willConnectTo
llama? Entonces que pasa? ¿Tiene el punto de crear y configurar el controlador de vista raíz? Nuevamente, recorra el código con el depurador. No solo confíe en la salida de la consola.Entonces, los pasos para llegar a un iOS 13 y una versión inferior
1) Cambiar el objetivo de implementación a iOS 12.
2) Reemplace los métodos de AppDelegate con lo que deberían tener para el desarrollo de iOS 12. También agregue esto:
3) Eliminar SceneDelegate.
4) Elimine Application Scene Manifest en su info.plist.
Funcionará tanto en iOS 13 como en versiones anteriores de iOS
fuente
Estaba atrapado con este problema y finalmente resolví eliminar las referencias de searchDisplayController del guión gráfico.
fuente
Cuando tuve un problema similar se debió a que la plantilla de aplicación única generada con Xcode 11.0 era incompatible con la que se necesita para una aplicación creada con Xcode 11.2.
Así que acabo de crear una nueva aplicación de una sola página con Xcode 11.2 y copié el SceneDelegate generado a mi antiguo proyecto que fue creado usando Xcode 11.0.
Después de eso, la pantalla en blanco había desaparecido y mi interfaz era visible una vez más.
fuente
Sigue fácilmente estos pasos
1-) Eliminar el archivo delegado de escena
2-) Agregue el siguiente código a AppDelegate.swift
3-) Elimine la línea del Manifiesto de la escena de aplicación de su archivo .plist
fuente