App without Storyboard

iOS 14

  • remove main story board from files
  • from => info remove 'main storyboard file base name'
  • then drill down in scene manifest to remove main item 0 main file name and remove

adjust code in sceneDelegate:

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)
        window.rootViewController = ViewController()
        window.makeKeyAndVisible()
        self.window = window
    }
...

Project > Targets > Deployment Info

empty "Main Interface"

Remove Reference in Info.plist

Open your Info.plist

    • Click the arrow at the leftmost of Application Scene Manifest (UIApplicationSceneManifest) key to expand
      Click the arrow at the leftmost of Scene Configuration (UISceneConfigurations) key to expand
      Click the arrow at the leftmost of Application Session Role (UIWindowSceneSessionRoleApplication) key to expand
      Click the arrow at the leftmost of First Item (Item 0) key to expand
      Remove the key Storyboard Name (UISceneStoryboardFile)
  • From IOS 13

    Not in appDelegate anymore...
    in SceneDelegate:

    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)
            window?.rootViewController = MockupIntroVC()
            window?.backgroundColor = .systemBackground // optional
            window?.makeKeyAndVisible()
        }

    AppDelegate

    var window: UIWindow?

      func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        if let window = window {
          window.backgroundColor = UIColor.whiteColor()
          window.rootViewController = ViewController()
          window.makeKeyAndVisible()
        }
        return true
      }

    ViewController

    class ViewController: UIViewController {

      var button :UIButton!
     

      override func viewDidLoad() {
        super.viewDidLoad()
       
        // Do any additional setup after loading the view, typically from a nib.
        view.backgroundColor = .redColor()
        setupLayout()
      }
     

      func setupLayout()
      {
        if button == nil
        {
          self.view.addSubview(createButton(self))
          }
      }

      func buttonPressed(sender:UIButton)
      {
        showNewViewController(SecondViewController())
      }
      override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
        print("\(__FUNCTION__)")
      }

      deinit
      {
        print("\(__FUNCTION__) v1")
      }

    }

    // General funcs for demo purposes
    func createButton(vc:UIViewController)->UIButton
    {
      let button:UIButton
      button = UIButton(frame: CGRectMake(0,0,123,123))
      button.backgroundColor = .yellowColor()
      button.addTarget(vc, action: "buttonPressed:", forControlEvents: .TouchUpInside)
      button.setTitle("Button", forState: .Normal)
      return button
    }

    func showNewViewController(vc:UIViewController)
    {
      UIApplication.sharedApplication().keyWindow!.rootViewController = vc.self

    }

    SecondViewController

    class SecondViewController: UIViewController {

      var button :UIButton!
      override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        view.backgroundColor = .blueColor()
        setupLayout()
          }

      override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
      }


      func setupLayout()
      {
        if button == nil
        {
          self.view.addSubview(createButton(self))
        }
      }
     
      func buttonPressed(sender:UIButton)
      {
        showNewViewController(ViewController())
      }
      deinit
      {
        print("\(__FUNCTION__) v2")
      }
    }

    Tags: