【2024年4月】弊社では、基本リモートワークで一緒に成長してくださるメンバーを広く募集させていただいております。 詳細はこちら

【Swift】AppDelegateのライフサイクルの管理方法やSceneDelegateとの違いについて徹底的に解説!

【Swift】AppDelegateのライフサイクルの管理方法やSceneDelegateとの違いについて徹底的に解説!
ふくしま

こんにちは!株式会社メモリアインクのふくしまです!

この記事では、AppDelegateとSceneDelegateに関する深い理解と、その使い分けについて徹底的に解説します。

この記事を読んで分かること…
・AppDelegateとは?
・SceneDelegateとの使い分け
・AppDelegateでできること

目次

AppDelegateとは?

AppDelegateは、アプリケーションのライフサイクルや状態遷移に密接に関連するイベントを管理するオブジェクトです。起動時の設定、アクティブ状態への遷移、バックグラウンド移行時の処理など、アプリケーション全体の動作に関わる重要な処理を行います。

SceneDelegateとの違い

AppDelegateはアプリケーションレベルのイベントを管理します。これにはアプリケーションの起動と終了、バックグラウンドとフォアグラウンドの遷移などが含まれます。
一方で、SceneDelegateは、iOS 13以降で導入され、特定のシーン(ウィンドウ)のライフサイクルを管理します。
要は、UIに関わるライフサイクル以外はAppDelegateが担うということになります。

AppDelegateSceneDelegateの分離により、特に複数のウィンドウをサポートするアプリケーションにおいて、より柔軟かつ効率的な管理が可能になりました。これは、アプリケーションの設計をより細分化し、特定のシーンやタスクに焦点を当てた管理を容易にすることを目的としています。

SceneDelegate については、以下の記事で詳しく解説しているので併せてご確認ください!

AppDelegateのライフサイクルメソッド

AppDelegate.swift

以下のコードはプロジェクト生成時に作成される「AppDelegate.swift」ファイルの中身です。

import UIKit

@main
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.
    }

}

AppDelegate.swiftの説明

◾️行 6-9: application(_:didFinishLaunchingWithOptions:)メソッドは、アプリケーションが起動し終えた直後に呼び出されます。アプリケーションの初期設定やリソースの準備を行う場所です。ここでtrueを返していますが、これは起動が成功したことを示します。
◾️行 13-17: application(_:configurationForConnecting:options:)メソッドは、新しいUISceneSessionが作成されているときに呼び出されます。ここでは、新しいシーンの設定を選択しています。UISceneConfigurationオブジェクトを返し、シーンの名前とセッションの役割を指定しています。
◾️行 19-23: application(_:didDiscardSceneSessions:)メソッドは、ユーザーによって一つ以上のシーンセッションが破棄されたとき、またはアプリが実行されていない状態でシーンセッションが破棄された後にアプリが起動されたときに呼び出されます。破棄されたシーンに特有のリソースを解放するために使用します。

ライフサイクルメソッドの追加

AppDelegateは初期状態で書かれているライフサイクル以外にも様々なライフサイクルメソッドが用意されています。

applicationDidBecomeActive(_:)

アプリケーションがアクティブ状態になったときに呼ばれます。アプリケーションが前面に来てユーザーとのインタラクションが可能になる状態です。

applicationDidEnterBackground(_:)

アプリケーションがバックグラウンドに移行するときに呼ばれます。データの保存やセッションの終了など、バックグラウンド移行に必要な処理をここで行います。

applicationWillTerminate(_:)

アプリケーションが終了する直前に呼ばれます。最終的なデータ保存やリソースの解放など、終了処理をここで行います。

applicationWillResignActive(_:)

アプリケーションがアクティブ状態から離れる直前に呼ばれます。例えば、電話がかかってきた場合などです。

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

リモート通知を受信したときに呼ばれます。

application(_:didFailToRegisterForRemoteNotificationsWithError:)

リモート通知の登録に失敗したときに呼ばれます。

application(_:didRegisterForRemoteNotificationsWithDeviceToken:)

デバイスがリモート通知に正しく登録されたときに呼ばれます。

まとめ

いかがでしたか?
この記事では、AppDelegateの役割やライフサイクルの管理方法、SceneDelegateとの違いについて詳しく解説しました。この記事が、皆様の開発ライフの一助となれれれば幸いです。

ふくしま

この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
をオススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

コメントする

目次