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 →作成

2.Main.storyboard.swift/SceneDelegate.swiftを削除

プロジェクトを作成すると下記のような構成になっています。
その中のMain.storyboardとSceneDelegate.swiftを削除します。

3. Info.plistの設定

Info.plistを開きます。
"Application Scene Mainfest"と"Main storyboard file base name"を削除します。
(Storuboard NameのMainとMain storyboard file base nameのMainを空白にしてもできますが、今回は丸ごと削除します。)

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

ビルドすると無事に表示されました!!

おわりに

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