Storyboradを使わずに画面を作成する方法（Xcode）

#はじめに
storyboardを使わずにviewcontrollerで画面を表示する方法をまとめました。
Main.stroyboardを削除して下記のようなエラーが出る場合の対処法です。
エラー内容："Thread 1: Exception: "Could not find a storyboard named 'Main' in bundle NSBundle"

##環境
Xcode11


##1. 新規Projectを作成
 Single View App →作成
![スクリーンショット 2020-04-24 19.30.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497683/0c269b58-cff8-3c20-78c0-86fdb8812632.png)

##2.Main.storyboard.swift/SceneDelegate.swiftを削除
プロジェクトを作成すると下記のような構成になっています。
その中のMain.storyboardとSceneDelegate.swiftを削除します。
![スクリーンショット 2020-04-24 19.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497683/75440286-5f34-471c-bf02-d6504468b874.png)

##３. Info.plistの設定
Info.plistを開きます。
"Application Scene Mainfest"と"Main storyboard file base name"を削除します。
(Storuboard NameのMainとMain storyboard file base nameのMainを空白にしてもできますが、今回は丸ごと削除します。)
![スクリーンショット 2020-04-24 19.42.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497683/742a967e-0b79-2003-b4f8-1e7512f66a50.png)

##4. AppDelegate.swift
デフォルトでは下記のようなコードになっています。

```AppDelegare.swift 
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {



    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }


}

```

// MARK: UISceneSession Lifecycle 以下を削除して、下記のように変更します。

```AppDelegare.swift 
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()

        return true
    }
}
```

##5. ViewControllerの実装
ViewControllerで画面が表示できたことを確認するために、ViewControllerを実装します。
(背景色を緑色、「設定完了!!」を表示)

```ViewController.swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        view.backgroundColor = UIColor.green // 背景をGreenに変更
        
        let titleLabel = UILabel() // ラベルの生成
        titleLabel.frame = CGRect(x: 0, y: 120, width: UIScreen.main.bounds.size.width, height: 44) // 位置とサイズの指定
        titleLabel.textAlignment = NSTextAlignment.center // 横揃えの設定
        titleLabel.text = "設定完了!!" // テキストの設定
        titleLabel.textColor = UIColor.black // テキストカラーの設定
        titleLabel.font = UIFont(name: "HiraKakuProN-W6", size: 25) // フォントの設定
        self.view.addSubview(titleLabel) // ラベルの追加
    }
}
```
##6. Build
ビルドすると無事に表示されました！！
<img width="375" alt="Simulator Screen Shot - iPhone SE (2nd generation) - 2020-04-23 at 20.02.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497683/c0a95a3f-4060-ef19-7407-9c1ebfa218cd.png">

#おわりに
他にもStoryboardを使わない設定が書かれた記事がありますが、所々異なる部分があり苦労したので、備忘録としてここに残します。