The Difference between AppDelegate and SceneDelegate in Swift

yikaraman
3 min readJul 2, 2023

--

When developing iOS applications in Swift, you’ll encounter two important classes: AppDelegate and SceneDelegate. Each has distinct roles in managing the application's lifecycle and handling key events. In this article, we'll explore the differences between AppDelegate and SceneDelegate and provide code examples to illustrate their responsibilities in modern iOS app development.

AppDelegate

The AppDelegate class has long been a core component of iOS development. It acts as the application's delegate and handles events related to the app's lifecycle, including launching, backgrounding, foregrounding, and termination.

Key Responsibilities of AppDelegate:

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Perform initial app setup
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Save data, pause tasks, reduce resource usage
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Perform actions before the app becomes active again
}
func applicationWillTerminate(_ application: UIApplication) {
// Clean up resources or save critical data
}
}

In the above code, the AppDelegate class conforms to the UIApplicationDelegate protocol. The didFinishLaunchingWithOptions method handles app launch and setup, while applicationDidEnterBackground and applicationWillEnterForeground manage transitions between the background and foreground states. Lastly, applicationWillTerminate handles app termination.

SceneDelegate

Introduced in iOS 13 to support multi-tasking and multiple windows, the SceneDelegate class manages one or more scenes within an app. A scene represents a specific instance of the app's UI, such as a window or split view.

Key Responsibilities of SceneDelegate:

import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let viewController = ViewController()
let navigationController = UINavigationController(rootViewController: viewController)
window = UIWindow(windowScene: windowScene)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
}
func sceneDidDisconnect(_ scene: UIScene) {
// Perform cleanup tasks specific to the disconnected scene
}
func sceneDidBecomeActive(_ scene: UIScene) {
// Handle scene activation
}
func sceneWillResignActive(_ scene: UIScene) {
// Handle scene deactivation
}
}

In the above code, the SceneDelegate class conforms to the UIWindowSceneDelegate protocol. The scene(_:willConnectTo:options:) method configures the initial scene, sets up view controllers, and establishes dependencies. The sceneDidDisconnect, sceneDidBecomeActive, and sceneWillResignActive methods handle scene-specific events such as disconnection, activation, and deactivation.

Relationship between AppDelegate and SceneDelegate

In modern iOS app development, AppDelegate and SceneDelegate have more distinct roles. AppDelegate handles app-level lifecycle events, while SceneDelegate focuses on managing individual scenes within the app.

During app launch, AppDelegate performs the initial setup and delegates scene-related responsibilities to SceneDelegate. The SceneDelegate manages scene activation, deactivation, and disconnection.

Understanding the difference between AppDelegateand SceneDelegate is crucial for developing iOS applications using Swift. While AppDelegate handles app-level lifecycle events, SceneDelegate manages individual scenes within the app. Let's recap the key points and benefits of each class:

  • AppDelegate is responsible for app-level events, such as app launch, backgrounding, foregrounding, and termination. It is the entry point for handling these events and performing necessary setup and cleanup tasks.
  • SceneDelegate manages individual scenes within the app, which are instances of the app's UI, such as windows or split views. It handles scene-specific events, like scene configuration, activation, deactivation, and disconnection.

By leveraging the capabilities of both AppDelegate and SceneDelegate, you can build robust and adaptive iOS applications. They enable greater flexibility and support for multi-tasking scenarios, ensuring a seamless user experience.

--

--