SM654321
SM654321

Reputation: 89

How do I rename the initial programmatic ViewController class for my iOS app without involving storyboards

I have been looking for a while and cannot find an answer to this question that does not involve storyboards.

It's quite simple. When you build a new iOS app in Xcode you are given the ViewController.swift file that contains the initial ViewController() class for the app. This view controller is the main view for the app.

If I rename the class to say ViewControllerTest(), when I build and run the app now only loads a blank screen since it cannot find the ViewController class as I renamed it.

How do I set the project in Xcode to use the new ViewControllerTest() class as the initial view controller?

Thanks

Upvotes: 0

Views: 316

Answers (1)

rollingcodes
rollingcodes

Reputation: 15978

If you want to disregard using the storyboard entirely, which I prefer because then all code is in one place, you need to add the following in your AppDelegate or SceneDelegate depending on what version Xcode you are creating your project with.

Xcode 10 and earlier

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        let window = UIWindow(frame: UIScreen.main.bounds)
        // Or whatever you want to name your view controller class
        window.rootViewController = ViewController() 
        window.makeKeyAndVisible()
        self.window = window // retain instance
        return true
    }

}

for Xcode 10 and earlier you should also change the value of the UIMainStoryboardFile property to an empty string in your Info.plist.

Xcode 11 and later

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = scene as? UIWindowScene else { return }
        let window = UIWindow(windowScene: windowScene)
        // Or whatever you want to name your view controller class
        window.rootViewController = ViewController() 
        window.makeKeyAndVisible()
        self.window = window // retain instance
    }

}

for Xcode 11 projects and newer, you should populate the Application Scene Manifest property as shown here:

enter image description here

Upvotes: 2

Related Questions