Вам нужно продублировать код, но вы должны убедиться, что он работает только в правильной системе. В iOS 13 вы не хотите, чтобы приложение делегировало код тела didFinishLaunching
, поэтому используйте проверку доступности, чтобы предотвратить это. Точно так же используйте доступность, чтобы скрыть содержимое сцены окна от iOS 12.
Вот базовый эскиз решения, которое корректно работает как на iOS 12, так и на iOS 13:
AppDelegate.Swift
import UIKit
@UIApplicationMain
class AppDelegate : UIResponder, UIApplicationDelegate {
var window : UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey : Any]?)
-> Bool {
if #available(iOS 13, *) {
// do only pure app launch stuff, not interface stuff
} else {
self.window = UIWindow()
let vc = ViewController()
self.window!.rootViewController = vc
self.window!.makeKeyAndVisible()
self.window!.backgroundColor = .red
}
return true
}
}
SceneDelegate.swift
import UIKit
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window : UIWindow?
func scene(_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
self.window = UIWindow(windowScene: windowScene)
let vc = ViewController()
self.window!.rootViewController = vc
self.window!.makeKeyAndVisible()
self.window!.backgroundColor = .red
}
}
}
ViewController.swift
import UIKit
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("view did load")
self.view.backgroundColor = .green
}
}
Обратите внимание, что работать с другими дубликатами, такими как активация приложения, намного проще, потому чтоесли вы поддерживаете оконные сцены, метод делегата приложения не будет вызываться в iOS 12. Таким образом, проблема ограничена этой единственной ситуацией, а именно, когда у вас есть манипуляции с контроллером оконного / корневого представления для выполнения при запуске (например, без раскадровки).