iosxcode-storyboardios13

Cannot change Main.storyboard's name on iOS 13 [Xcode 11 GM seed 2]


On iOS 13 simulator with Xcode 11 GM seed 2, the app crashes after Main.storyboard's name changed (Info.plist changed also). Setting option Main Interface to empty cause the same problem. The iOS 13 system always try to find the Main.storyboard, and failed with crashing message:

*** reason: 'Could not find a storyboard named 'Main' in bundle

Everything is fine on iOS 12 and earlier versions. It looks like a bug in iOS 13.

Does anyone meet same problem? And any solutions?


Solution

  • Swift 5 with iOS 13

    One more changes require in info.plist file under Application Scene Manifest group.

    enter image description here

    Change name in Application Scene Manifest also.

    Additional:
    If you want to create the root window without a storyboard on iOS13, you need removing the Main storyboard file base name and Storyboard Name item from Info.plist, and then create the window programmatically in SceneDelegate:

    class AppDelegate: UIResponder, UIApplicationDelegate {
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            if #available(iOS 13.0, *) {
                //Do nothing here
            } else {
                window = UIWindow(frame: UIScreen.main.bounds)
                window?.makeKeyAndVisible()
            }
    
            return true
        }
    }
    
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
        var window: UIWindow?
    
        @available(iOS 13.0, *)
        func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
            // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
            // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
            // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
            guard let windowScene = (scene as? UIWindowScene) else { return }
            window = UIWindow(windowScene: windowScene)
            // continue to create view controllers for window
        }
    
        //......
    }