Saat ini saya mendapatkan layar kosong dengan Xcode 11, Target iOS 13.0 (aplikasi berfungsi baik dengan semua versi di bawah iOS 12.1 hingga 12.4), saya ingin membuat Aplikasi saya berfungsi untuk kedua pengguna iOS di atas 12.1 dan juga 13.0 saat ini mendapatkan layar kosong meskipun menambahkan SceneDelegate di bawah ini ke proyek saya yang ada dan
menambahkan file App Manifest
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 }
}
}
}
Berikut ini adalah AppDelegate saya yang dipanggil pertama dan menjalankan didFinishLaunchWithOptions
metode. Saya ingin tahu bagaimana saya bisa membuat metode ini hanya memanggil jika Target ios saya kurang dari 13.0 dan memanggil metode SceneDelegate untuk menginisialisasi rootViewController saya setelah 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
metode delegasi adegan dan lakukan langkah demi langkah. Apakah itu melakukan apa yang Anda harapkan?willConnectTo
yang disebut? Lalu apa yang terjadi? Apakah itu tidak membuat titik untuk membuat dan mengatur pengontrol tampilan root? Sekali lagi, langkah melalui kode dengan debugger. Jangan hanya mengandalkan output konsol.Jadi langkah-langkah untuk sampai ke iOS 13 dan versi yang lebih rendah
1) Ubah target penempatan ke iOS 12.
2) Ganti metode AppDelegate dengan apa yang seharusnya mereka miliki untuk pengembangan iOS 12. Tambahkan juga ini:
3) Hapus SceneDelegate.
4) Hapus Aplikasi Scene Manifest di info.plist Anda.
Ini akan bekerja pada iOS 13 dan Versi iOS yang lebih rendah
sumber
Saya terjebak dengan masalah ini, dan akhirnya saya menyelesaikan menghapus referensi searchDisplayController dari storyboard.
sumber
Ketika saya memiliki masalah yang sama, itu disebabkan karena templat Aplikasi Tunggal yang dibuat menggunakan Xcode 11.0 tidak kompatibel dengan yang dibutuhkan untuk aplikasi yang dibuat dengan Xcode 11.2.
Jadi saya baru saja membuat Aplikasi Satu Halaman dengan Xcode 11.2 dan menyalin SceneDelegate yang dihasilkan ke proyek lama saya yang dibuat menggunakan Xcode 11.0.
Setelah itu, layar kosong menjadi antarmuka saya terlihat sekali lagi.
sumber
Langkah-langkah ini mudah diberas
1-) Hapus file delegasi adegan
2-) Tambahkan kode di bawah ini ke AppDelegate.swift
3-) Hapus baris Manifes Adegan Aplikasi dari file .plist Anda
sumber