[iOS] 自動的に生成されるMain.storyboardを使わずにUIViewControllerを表示する

XcodeでiOSのプロジェクトを作成すると、デフォルトでMain.storyboardやViewControllerが作成されて、プロジェクトが汚れています。 (初めて作る人や、実験をしたいだけの場合は良いのですが) プロジェクトを進めていくために、不要なViewControllerを排除して任意のViewControllerをAppDelegateで生成するまでのテンプレートを目指します。 ## 環境 - Xcode 12.2 - SwiftUIを使わない(Storyboard) # 手順 ## Info.plistの不要な項目を削除する
```text `gutter:false; Application Sence Manifest Scene Configuration Application Session Role Item 0 Storyboard Name => この行を削除します ``` ## Main Interfaceを空にする
Main Interfaceに`Main`と記載されているので、空白にします。 ## AppDelegate.swiftを書き換える AppDelegate.swiftを以下のように書き換えます。 ```swift `gutter:true; class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if #available(iOS 13.0, *) { // SenceDelegateで行う } else { window = UIWindow(frame: UIScreen.main.bounds) AppDelegate.setupWindow(window) } return true } class func setupWindow(_ window: UIWindow?) { guard let window = window else { return } let taskListViewController = UIStoryboard(name: "TaskList", bundle: nil).instantiateInitialViewController() as! TaskListViewController let navigationController = UINavigationController(rootViewController: taskListViewController) window.rootViewController = navigationController window.makeKeyAndVisible() } // 以下省略 } ``` setupWindowメソッドは新規に追加します。 setupWindowメソッドで初回表示するViewControllerの生成とwindowへのセットアップをしています。 ## SceneDelegate.swiftを書き換える SceneDelegate.swiftを以下のように書き換えます ```swift `gutter:true; class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? 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) AppDelegate.setupWindow(window) } // 以下省略 } ``` # まとめ 1回何かのプロジェクトでやれば、毎回そのプロジェクトからコピペしてます。 知らないと、ググったりして時間がかかるので早くプロジェクトを進めたい時にストレスになります。

0 件のコメント :

コメントを投稿