如何在 iOS 中不使用 info.plist 中的 `SceneConfiguration` 来连接 SceneDelegate?

6 uikit ios

我是 SceneDelegate 设置的新手。我注意到在 info.plist 中,我们有一个映射Scene Configuration

Configuration Name: Default Configuration <- this key
Delegate Class Name: $(PRODUCT_MODULE_NAME).SceneDelegate <- this file
Run Code Online (Sandbox Code Playgroud)

然后在 AppDelegate 中connectingSceneSession,我们使用 key 返回配置Default Configuration

return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
Run Code Online (Sandbox Code Playgroud)

是否可以避免这种(key -> file)映射info.plist,并以编程方式连接它?

注意:我不是在问故事板。有大量关于删除故事板的教程,我知道这一点。

pai*_*aiv 8

从 中删除“场景配置”( UISceneConfigurations) 条目Info.plist,并UISceneConfiguration在 中实例化AppDelegate

// class AppDelegate
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    if connectingSceneSession.role == UISceneSession.Role.windowApplication {
        let config = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role)
        config.delegateClass = SceneDelegate.self
        config.storyboard = UIStoryboard(name: "Main", bundle: nil)
        return config
    }
    fatalError("Unhandled scene role \(connectingSceneSession.role)")
}
Run Code Online (Sandbox Code Playgroud)

手册中:

如果您不在应用程序的 Info.plist 文件中包含场景配置数据,或者您想要动态更改场景配置数据,请实现此方法。UIKit 在创建新场景之前不久会调用此方法。