SwiftUIの2つのライフサイクル

SwiftUIには2種類のライフサイクルがあります。

  • UIKit App Delegate
  • SwiftUI App

この記事では、この2種類のライフサイクルの違いについて解説します。

ライフサイクルの選択

アプリで使用するライフサイクルはプロジェクトを作成するときに選択します。Xcode 12でプロジェクト作成時のオプションにライフサイクルの設定が追加されています。

但し、Multiplatformのテンプレートを選択したときは、ライフサイクルの設定は表示されません。MultiplatformはSwiftUI Appが使われます。

UIKit App Delegate

UIKit App DelegateはアプリのライフサイクルはSwiftUI導入以前からあるUIKitを使って実装する方法です。OSによってアプリを実装するときに使用するフレームワークが異なるため、次のようにOS別にライフサイクルが用意されています。

  • UIKit App Delegate – iOS/iPadOS/tvOS
  • AppKit App Delegate – macOS
  • WatchKit App Delegate – watchOS

SwiftUI App

Xcode 12以降で選択できるようになった新しいライフサイクルです。同じコードで複数のOSに対応できます。動作環境は以下の通りです。

  • iOS/iPadOS 14.0以降
  • macOS 11.0以降
  • tvOS 14.0以降
  • watchOS 7.0以降

SwiftUI Appのコード

アプリのライフサイクルというのは、アプリが起動してから終了するまでの間のことです。そして、ライフサイクルのコードで必ず実装する必要がある処理はContentViewを表示する処理です。必要なコードはXcodeが生成してくれます。生成されたコードは次のような処理を行います。

  1. ウインドウの作成
  2. シーンの作成
  3. ContentViewの配置

SwiftUI Appのコードはシンプルです。その上、SwiftUIが対応するOSすべてで共通です。

@import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

@main

@mainアトリビュートは、MyApp構造体がプログラムのエントリーポイントになることを表しています。Swift 5.3で追加されたアトリビュートです。

App

Appプロトコルはアプリの表示内容を定義するシーンです。テンプレートで生成されたコードの様にbodyプロパティにアプリの表示内容を設定します。

WindowGroup

WindowGroupはアプリのビュー階層のコンテナです。ウインドウ毎に、WindowGroupの中に配置したビューをテンプレートとして使い、ウインドウに表示されるビューを作ります。

ContentView

アプリが起動したときに最初に表示されるウインドウの表示内容を定義するビューです。

SwiftUI AppとUIKit App Delegateはどちらを使う?

これから新規に作成するアプリの場合には、動作環境によって決まると思います。SwiftUI Appが使用できない、iOS 13で動くアプリにする必要があるときはUIKit App Delegateを使用します。

筆者の考えでは、これから新規に作成するアプリの場合は、SwiftUI Appを使う方が良いと思います。理由は複数OSへの対応が容易になるからです。

 

投稿者プロフィール

林 晃
林 晃macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者
アールケー開発代表。macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者。ObjC/Swift/C++使い。豊富な開発実務経験を基に、教育コンテンツ開発、技術書執筆、技術指導、技術セミナー講師、企業内研修講師、行政・自治体職員研修講師も行います。

基礎から学ぶMetal


「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。

私が初めてGPUプログラミングを行ったとき、どこから手をつけて、学んでいけば良いのか分からず呆然としました。もし、あのとき、これを教えてくれればという部分を解説しました。本書で解説している部分はMetalの基礎となる部分で、Metalを使うときに必ず触れることになる部分です。

詳細

基礎から学ぶSwiftUI


「基礎から学ぶ SwiftUI」というタイトルの本を執筆しました。

SwiftUIの入門書です。

SwiftUIのコンセプトは「ユーザーインターフェイスを作るための最短パスを提供する」「一度学べば(Appleのプラットフォームの)どこにでも適用できる」です。

SwiftUIの概要から始まって、一つ一つのテクノロジートピックに注目しながらSwiftUIとは何か?どんなことができるのか?どのようなコードを書けば良いのかなどを丸々一冊使って解説しています。

詳細

最近の著書

  1. 基礎から学ぶ SwiftUI

最近の記事