Xcode 11 在包 NSBundle 中找不到名为 'Main' 的故事板

Xcode 11 Could not find a storyboard named 'Main' in bundle NSBundle

之前有人问过这个问题,但我的问题是 Xcode 11 和 UISceneConfiguration。在 Xcode 11 之前,当您从目标中删除故事板 (Main.storyboard),然后添加一个新故事板 (AnotherStoryboard.storyboard) 时,您必须更新 Targets > General > Deployment Info > Main Interface 才能使用您的新添加的故事板。在 Xcode 11 中,这还不够,应用程序会抛出异常

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Could not find a storyboard named 'Main' in bundle NSBundle

我发现的问题是,在 Info.plist 中,现在有一个名为 UIApplicationSceneManifest 的新键,其中有一个嵌套的 UISceneStoryboardFile,当您更改 Main目标内的接口​​。但是,在 Info.plist 的顶层仍然有一个 UIMainStoryboardFile 键,它保存着旧 "Main" 故事板的标题。长话短说,如果您删除 UIMainStoryboardFile,应用程序将 运行 正常。

我的问题:这是 Xcode 11 中的错误,还是我遗漏了其他可以阻止此问题的内容?我在尝试调试它时并没有真正找到任何有用的东西,最后自己弄清楚了。

在你的 info.plist Main 文件中设置了 Scene Configuration,所以它总是找到那个文件并抛出异常。您可以通过编程方式设置默认值 ViewController。在您的 info.plist 中,将 Scene Configuration 设置为 Default configuration 并将 Select none 设置为 Targets > General > Deployment Info > Main Interface

你的sceneWillConnectTo就像

  window = UIWindow(frame: UIScreen.main.bounds)
  window!.windowScene = windowScene
  window!.rootViewController = //your homeVC
  window!.makeKeyAndVisible()

在您的 info.plist 中,您必须设置此 属性 应用程序场景清单 -> 场景配置 -> 应用程序会话角色 -> 项目 0 -> 故事板名称

Info.plist