Xcode 11でStoryboardを使わずに開発する

Satsuki Hashiba
3 min readDec 1, 2019

--

Xcode 11より、新たにSceneという概念が導入されました。本記事では、SceneDelegateにおける、Storyboardを使わないwindowの生成方法と、iOS 12以下の対処方法を解説します。

Sceneとは

iOS 13/Xcode 11よりSceneが導入されました。Sceneによって、Multiple windowsでの動作が可能になります。Multiple windowsとは、iPadOSで同時にいくつかのセッションを開ける機能を指しています。

引用: Scenes | Apple Developer Documentation

Xcode 11より、新規プロジェクトを作成するとSceneDelegate.swiftが自動生成されるようになります。このファイルでは、いくつかあるSceneの内の1つのライフサイクルを管理します。一方で、AppDelegateの中にもSceneに関するメソッドが追加されています。こちらは、Sceneの追加や削除といった、アプリケーション全体に関わるメソッドです。

まとめると、AppDelegateはアプリケーションレベルのライフサイクルを管理し、SceneDelegateはSceneレベルのライフサイクルを管理します。

SceneDelegate without Storyboard

Main.storyboardを消して、1 view controller — 1 xibで開発するスタイルが多いと思いますが、SceneDelegateの導入によって、ほとんど同じではありますが、これまでと生成方法が少し変わります。

  1. TargetsのMain Interfaceを空にする
  2. Info.plistからApplication Scene Manifestの値を変更する
    Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 (Default Configuration) から Storyboard Nameを削除します。
  3. windowのrootViewControllerを指定する
    SceneDelegateのscene(_:willConnectTo:options:)メソッドの中で、以下のように指定します。

以上で、Storyboardを使わずにwindowを生成できます。

iOS 12以下への対応

iOS 12以下を対象にすると、そのままではビルドが通りません。まず、availableをつけてSceneDelegate関連のコードを切り分けましょう。

AppDelegateでwindowを宣言し、iOS 13未満の場合は従来通りapplication(_: didFinishLaunchingWithOptions:)内でwindowの設定を行います。

以上でiOS 12以下も問題なく動くようになります。

--

--

Satsuki Hashiba
Satsuki Hashiba

Written by Satsuki Hashiba

iOS Engineer 🍋 Master’s Student 🌄 Japan ⛩

No responses yet