iOSアプリはStoryboardを使わずにコードだけで作ることにした

2019年2月9日

5CF4A21E-FACD-493C-A3D4-D1731F8C5AC6

swiftでiOSアプリ開発の勉強をしているのだけど、Storyboardを使うのをやめて極力コードだけで作ることにしました。

どうして?

練習のために簡単で小さなアプリをたくさん作っていると、前に作ったアプリから流用したい部分が出てきます。
そこで新しいプロジェクトを作ってコピーできるところだけ部分的にコピーしたいのだけど、Storyboardを使ってレイアウトしたりしているとソースを部分的にコピーして貼り付けるだけではアプリが動かず、StoryboardへのUIの配置やソースファイルへの接続はやり直す必要が出てくる。
Storyboardは視覚的にレイアウトできて最初のうちはわかりやすくてよかったのだけど、新しいプロジェクトを作るたびに同じ作業の繰り返しで「めんどくさい!」と思うように。。。
それで、Storyboardを使わずコードだけで作ればソースのコピーだけで流用できると考えるようになりました。

やり方

好きなプロジェクト名でXcodeでiOSのSingle View Appを作成します。

プロジェクトの設定

Deployment Infoのmain Interfaceに入力されている main を削除して空欄にします。

EA33B513-C9FD-4776-993C-DD4BE495238B

main.sotryboardファイルの削除

プロジェクトナビゲータにあるMain.storyboardを削除します。

914B24C5-5B35-4B66-951D-35B0B9FE955C
Do you want to move “Main.storyboard” to the Trash, or only remove the reference to it?と聞いてくるので”Move to Trash”を選択しましょう。

DC9FA0F5-CA01-4C1C-BCFE-0E6E19FD5E75

AppDelegateファイルの編集

アプリを開いた時に表示する画面の設定を削除したため、新たにAppDelegateファイルで指定します。
3行追加してViewControllerのインスタンスをrootViewに指定して表示するようにします。

window = UIWindow(frame: UIScreen.main.bounds)
//windowのrootViewControllerにViewControllerのインスタンスを指定する
window?.rootViewController = ViewController()
//windowを見えるようにする
window?.makeKeyAndVisible()

AppDelegate.swift全体では下記のようになります。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        //デバイスのスクリーンサイズでwindowを生成する
        window = UIWindow(frame: UIScreen.main.bounds)
        //windowのrootViewControllerにViewControllerのインスタンスを指定する
        window?.rootViewController = ViewController()
        //windowを見えるようにする
        window?.makeKeyAndVisible()
        
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {

    }

    func applicationDidEnterBackground(_ application: UIApplication) {

    }

    func applicationWillEnterForeground(_ application: UIApplication) {

    }

    func applicationDidBecomeActive(_ application: UIApplication) {

    }

    func applicationWillTerminate(_ application: UIApplication) {

    }


}

ビルド

これで正常にビルドできるようになりますが、ViewContorollerクラスに何も設定していないため真っ黒な画面です。

BD4C21B0-9B17-4489-AC91-52B5F509E161

最後に

これでStoryboardを使わずにコードだけでアプリを作っていく下準備ができました!
この方法でアプリを作っておけばコードのコピペだけでviewやボタンを別のプロジェクトに移植できて便利です。
Stroyboardを使わずにviewやボタンを画面に配置する方法はまた別の記事で紹介したいと思います。