当前位置:首页>iOSAPP>iOS 26生命周期迁移全解析:开发者必知的适配指南

iOS 26生命周期迁移全解析:开发者必知的适配指南

  • 2026-10-11 06:31:00
iOS 26生命周期迁移全解析:开发者必知的适配指南

随着iOS 26的发布,苹果对应用生命周期管理提出更高要求。本文将深入解析适配要点,手把手带你完成从传统AppDelegate到UIScene生命周期的平滑迁移!

一、强制迁移条件检查

不满足以下两个条件都要升级:

1、 Info.plist  查看是否包含UIApplicationSceneManifest key

<dict>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
</dict>

2、app delegate中是否实现以下函数

funcapplication(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
returnUISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}

二、生命周期类相关介绍

生命周期函数介绍:

AppDelegate 负责处理应用层面的生命周期(如应用启动、场景会话管理)

SceneDelegate 负责处理 UI 场景层面的生命周期(如窗口显示、前后台切换)

1. AppDelegate.swift

核心职责: 处理应用启动、全局配置以及 SceneSession 的管理。

application(_:didFinishLaunchingWithOptions:)

  • 作用 :应用程序启动的入口点。通常用于进行一次性的全局配置(如初始化 SDK、配置全局外观、注册推送通知等)。

  • 调用场景 :App 进程启动并加载完成后立即调用。

application(_:configurationForConnecting:options:)

  • 作用 :当应用需要创建一个新的 UI 场景(Scene)时,系统会询问 AppDelegate 需要使用什么配置(例如加载哪个 Storyboard 或使用哪个类作为代理)。
  • 调用场景 :App 首次启动显示 UI 时,或者在 iPadOS 上用户创建新窗口时。

application(_:didDiscardSceneSessions:)

  • 作用 :通知代理用户已丢弃(关闭)了一个或多个场景会话。用于清理与这些场景相关的数据或资源。
  • 调用场景 :用户在多任务切换器中上滑关闭了某个窗口(Scene),或者系统为了释放内存销毁了场景会话。

2. SceneDelegate.swift

核心职责: 管理单个 UI 窗口(Scene)的生命周期。

scene(_:willConnectTo:options:)

  • 作用 :场景(UIWindowScene)即将连接到应用。这是设置 UI 窗口(UIWindow)和根视图控制器(RootViewController)的地方。

  • 调用场景 :App 启动或新窗口创建时。在此方法中, window 属性通常会被初始化并与 scene 关联。

sceneDidBecomeActive(_:)

  • 作用 :场景已从非活动状态移动到活动状态。此时 UI 是可见的且可以响应用户交互。用于恢复暂停的任务(如游戏计时器)。

  • 调用场景 :App 启动完成进入前台,或用户从后台/多任务界面切回 App。

sceneWillResignActive(_:)

  • 作用 :场景即将从活动状态变为非活动状态。此时 UI 仍可见但不再响应交互。用于暂停游戏、保存临时数据。

  • 调用场景 :来电、下拉通知中心、上滑进入多任务切换器时。

sceneWillEnterForeground(_:)

  • 作用 :场景即将从后台进入前台。用于撤销进入后台时所做的更改(如重新加载网络数据)。

  • 调用场景 :App 从后台被重新打开,在 sceneDidBecomeActive 之前调用。

sceneDidEnterBackground(_:)

  • 作用 :场景已进入后台。此时 UI 不可见。 这是保存数据、释放共享资源的关键时机 。

  • 调用场景 :用户按下 Home 键或上滑回到桌面。

sceneDidDisconnect(_:)

  • 作用 :场景与应用断开连接。系统可能会为了释放资源而释放场景。

  • 调用场景 :应用进入后台一段时间后被系统回收 Scene,或者用户主动关闭该窗口。 注意: 这并不意味着 App 进程被杀掉,只是该 UI 场景被释放。

补充:如果窗口的根视图控制器是通过编程方式加载的,需要在下面的函数中添加根控制器的代码

classSceneDelegate: UIResponder, UIWindowSceneDelegate{
var window: UIWindow?

funcscene(
_ scene: UIScene,
        willConnectTo session: UISceneSession,
        options connectionOptions: UIScene.ConnectionOptions
    )
 {
guardlet windowScene = scene as? UIWindowSceneelse { return }

// 手动设置根控制器
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = YourRootViewController()
        window?.makeKeyAndVisible()
    }
}


// 新创建项目的默认代码
funcscene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guardlet_ = (scene as? UIWindowScene) else { return }
}

3. 关键方法映射

UIApplicationDelegate和UISceneDelegate对应代理方法映射表如下:

UIApplicationDelegate
UISceneDelegate
作用
调用场景
applicationDidBecomeActive(_:)
sceneDidBecomeActive(_:)
场景已从非活动状态移动到活动状态
App 启动完成进入前台,或用户从后台/多任务界面切回 App
applicationWillResignActive(_:)
sceneWillResignActive(_:)
场景即将从活动状态变为非活动状态
来电、下拉通知中心、上滑进入多任务切换器时
applicationDidEnterBackground(_:)
sceneDidEnterBackground(_:)
场景已进入后台
用户按下 Home 键或上滑回到桌面
applicationWillEnterForeground(_:)
sceneWillEnterForeground(_:)
场景即将从后台进入前台
App 从后台被重新打开,在 sceneDidBecomeActive 之前调用

以上便是iOS 26生命周期迁移全解析过程了。

如果觉得这篇文章对你有帮助,请  推荐+点赞+评论+关注+分享  本篇文章。

最新文章

随机文章