Xcode 11
之后,我们创建新工程,Xcode会默认创建SceneDelegate
文件,和AppDelegate
共同管理应用生命周期。
一、简介
Xcode11
之前创建工程里,AppDelegate
文件功能:
- didFinishLaunching
- 配置并启动一些像日志记录和云服务之类的组件
- 注册推送通知处理程序,并响应发送到app的推送通知
- 响应应用程序生命周期事件,例如进入后台,恢复应用程序或退出应用程序(终止)
- 处理openURL回调:application:openURL:options:
- 处理UniversalLink回调:application:continueUserActivity:restorationHandler:
Xcode 11
之后创建工程里,AppDelegate
文件功能:
SceneDelegate接替了AppDelegate的某些功能,window(窗口)的概念已被scene(场景)的概念所代替。 一个应用程序可以具有不止一个场景,而一个场景现在可以作为您应用程序的用户界面和内容的载体(背景)。
AppDelegate
功能变化为:
- didFinishLaunching
- application(_:configurationForConnecting:options:)
- application(_:didDiscardSceneSessions:)
- 配置并启动一些像日志记录和云服务之类的组件
- 注册推送通知处理程序,并响应发送到app的推送通知
SceneDelegate
功能:
- scene(_:willConnectTo:options:)
- sceneDidDisconnect(_:)
- sceneDidBecomeActive(_:)
- sceneWillResignActive(_:)
- sceneWillEnterForeground(_:)
- sceneDidEnterBackground(_:)
- 处理openURL回调:scene:openURLContexts:
- 处理UniversalLink回调:scene:continueUserActivity:
二、系统适配 (iOS8+)
如果使用Xcode11+
创建项目工程,有时候需要支持iOS8+
系统时,当iOS系统在iOS13
以下,走AppDelegate相关逻辑,当系统在iOS13
以上时,走SceneDelegate
逻辑。
需要做一些适配工作:
AppDelegate
文件处理:
-
在
AppDelegate.h
文件里,添加window
属性 -
在
AppDelegate.m
文件里,添加声明周期函数
- 在
AppDelegate.m
文件里,设置API限制
SceneDelegate
文件处理:
SceneDelegate.h
里:
2.
SceneDelegate.m
里:
针对
Info.plist
文件的说明: