Xcode 12.0.1开发时提示Main.storyboard未设置指定入口点怎么解决?
Xcode 12.0.1 开发Coordinator架构时Storyboard实例化报错的有效解决方案
开发Coordinator架构时,通常会绕开系统默认的Storyboard自动加载逻辑、手动管理页面路由栈,这类操作非常容易触发如下报错:Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
即使常规检查Storyboard入口标记、重新新建Storyboard测试,Xcode 12.0.1存在的配置缓存bug依然可能导致问题复现,可按以下步骤逐一排查解决:
分步排查操作
- 校验Info.plist配置:找到项目Info.plist中的
Main storyboard file base name键,确认对应值和你项目中实际使用的主Storyboard文件名完全匹配;如果采用纯代码驱动Coordinator架构、完全不依赖Storyboard自动加载流程,直接删除这个键值,从根源上避免系统启动时自动尝试加载Storyboard。 - 修正Storyboard入口标记:打开对应主Storyboard文件,选中作为初始页的视图控制器,在右侧属性检查器中勾选
Is Initial View Controller。注意Xcode 12.0.1存在配置缓存缺陷,勾选完成后将该视图控制器在画布上拖动到其他位置再拖回原位置,强制Xcode刷新入口标记的持久化配置,避免出现标记看似勾选、实际未写入文件的问题。 - 修正Target基础配置:进入项目Target的General面板,找到Deployment Info板块下的
Main Interface下拉选项,确认选项值和你实际配置的Storyboard路径一致;如果是手动初始化Window、由Coordinator接管页面栈的场景,将该下拉框的选项清空,不要预留任何Storyboard加载路径,避免系统和Coordinator逻辑出现加载冲突。 - 清理本地缓存:依次执行Xcode顶部菜单的
Product -> Clean Build Folder操作,手动删除~/Library/Developer/Xcode/DerivedData路径下当前项目的缓存文件夹,重启Xcode后重新运行项目,解决旧配置缓存残留导致的识别异常。 - 适配Coordinator架构的特殊校验:如果你是在SceneDelegate中手动初始化Window和根视图控制器,注意不要在Window初始化完成后,保留系统默认生成的、从Storyboard加载根VC的逻辑;如果需要将Storyboard中的初始VC交给Coordinator接管,要手动通过代码实例化根VC,不要依赖系统自动加载入口的逻辑,示例代码参考:
// 手动从Storyboard加载初始VC,避免系统自动加载引发的冲突 let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) let rootViewController = mainStoryboard.instantiateInitialViewController() window?.rootViewController = rootViewController // 后续将rootVC交给Coordinator接管路由流程
内容的提问来源于stack exchange,提问作者Varsha Shrivastwa
相关产品推荐
相关产品推荐

