В настоящее время я получаю пустой экран с Xcode 11, Target iOS 13.0 (приложение прекрасно работает со всеми нижеприведенными версиями iOS 12.1 до 12.4), я хочу, чтобы мое приложение работало как для пользователей iOS выше 12.1, так и для 13.0, в настоящее время получающих пустой экран, несмотря на добавив ниже SceneDelegate в мой существующий проект и
добавление файла манифеста приложения
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 }
}
}
}
Следующее - мой AppDelegate, который вызывается первым и выполняет didFinishLaunchWithOptions
метод. Я хочу знать, как я могу сделать этот вызов метода, только если мой целевой показатель ниже 13.0 и вызвать метод SceneDelegate для инициализации моего rootViewController после 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
методе делегата сцены и идите шаг за шагом. Это делает то, что вы ожидаете?willConnectTo
называется? Тогда что происходит? Получает ли смысл создавать и настраивать контроллер корневого представления? Опять пошагово код с помощью отладчика. Не просто полагаться на вывод консоли.Итак, шаги по переходу на iOS 13 и ниже
1) Измените цель развертывания на iOS 12.
2) Замените методы AppDelegate на то, что они должны иметь для разработки под iOS 12. Также добавьте это:
3) Удалить SceneDelegate.
4) Удалите манифест сцены приложения в вашем info.plist.
Он будет работать как на iOS 13, так и ниже.
источник
Я застрял с этой проблемой, и, наконец, я решил удалить ссылки searchDisplayController из раскадровки.
источник
Когда у меня возникла похожая проблема, это было связано с тем, что шаблон Single-App, созданный с помощью Xcode 11.0, был несовместим с тем, который был необходим для приложения, созданного с Xcode 11.2.
Поэтому я просто создал новое одностраничное приложение с Xcode 11.2 и скопировал сгенерированный SceneDelegate в мой старый проект, который был создан с использованием Xcode 11.0.
После этого пустой экран исчез, и мой интерфейс снова стал виден.
источник
Легко выполнить эти шаги
1-) Удалить файл делегата сцены
2-) Добавьте приведенный ниже код в AppDelegate.swift
3-) Удалите строку манифеста сцены приложения из файла .plist
источник