iOS11+项目移除SceneDelegate后didFinishLaunchingWithOptions是否需加代码
问题解答
你实测不加额外初始化代码也能正常运行,是UIKit的官方原生逻辑,不是Xcode的后台特殊处理,只要配置正确不会有后续隐患,具体逻辑如下:
iOS 13 推出UISceneDelegate之前,UIKit本身就支持主Storyboard自动加载逻辑:当系统检测到App没有使用UISceneDelegate、且项目配置指定了主Storyboard作为入口时,会自动完成以下操作:
- 创建和屏幕尺寸匹配的
UIWindow实例 - 加载Storyboard中的初始视图控制器,赋值给
window.rootViewController - 自动调用
window.makeKeyAndVisible()让界面展示 - 将生成的window实例挂载到AppDelegate的
var window: UIWindow?属性上
你查到的需要手动写初始化代码的教程,对应的是全代码构建界面、不使用Storyboard作为入口的场景,这种场景下系统找不到默认的界面入口,才需要开发者手动完成window的初始化和配置。
注意事项
- 确认
info.plist中已经完全删除Application Scene Manifest配置项,没有删干净的话iOS13及以上系统会优先尝试走UISceneDelegate逻辑,导致崩溃 - 确认项目General设置页的Deployment Info区块中,
Main Interface选项已经正确选中你要用的主Storyboard,要是这里为空才需要手动写初始化代码 - 如果后续计划改成全代码入口,再清空
Main Interface配置,加上你注释里的手动初始化代码即可
内容的提问来源于stack exchange,提问作者Andrei Herford
相关产品推荐
相关产品推荐

