9

I am facing an issue in Xcode 11 beta.

The problem is that I am not getting default window variable declared in AppDelegate file.

Is anybody facing this same issue?

rmaddy
  • 298,130
  • 40
  • 468
  • 517
Rashesh Bosamiya
  • 499
  • 5
  • 12

4 Answers4

7

In Xcode 11 this is now done in SceneDelegate

EDIT: if you’re still supporting iOS 12 or prior (or want to support 13 plus prior)

Add the UIWindowSceneDelegate to ApplicationDelegate

Add : var window:UIWindow?

Then proceed as you would to setting up in didFinishLaunching

Nikolaj Nielsen
  • 1,445
  • 2
  • 15
  • 31
4

The default var window: UIWindow? Is now moved in SceneDelegate.swift. To set a rootViewController in Xcode 11 you can work within SceneDelegate.swift file, In the scene delegate, you must create the window instance and the root view controller like below:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        // set or create your viewController here
        let yourViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(identifier: "yourViewController") as! YourViewController
        // set the rootViewController here using window instance
        self.window?.rootViewController = yourViewController
    }

Also this answer is helpful : Why is manually setup root view controller showing black screen?

Hope it will help you!

Emdad
  • 41
  • 1
0

In my case, that's all it takes.

    var window: UIWindow? // add this by yourself
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        window = UIWindow(frame: Device.bounds)
        let root = DDTabBarController()
        window?.rootViewController = root
        window?.makeKeyAndVisible()
        return true
    }
AllenPong
  • 9
  • 1
0

My approach:

first, in AppDelegate create a static property with the class of the view controller you want to access, like this

class AppDelegate: UIResponder, UIApplicationDelegate {

    // MARK: Home
    static var homeViewController: HomeViewController?

    ...
}

then, in the view controller

// MARK: - Managing the view
override func viewDidLoad() {
    super.viewDidLoad()

    // Singleton
    AppDelegate.homeViewController = self

    ...
}

how to use:

extension UIViewController {
    var homeViewController: HomeViewController? {
        if let controller = self as? HomeViewController {
            return controller
        }

        return AppDelegate.homeViewController
    }
}
Miniapps
  • 256
  • 3
  • 3