Scene Delegate

595 阅读1分钟

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文件处理:

  1. AppDelegate.h文件里,添加window属性 #import sUIKitUIkit.hs.png

  2. AppDelegate.m文件里,添加声明周期函数

(8COL )application(UIApplication )application.png

  1. AppDelegate.m文件里,设置API限制

tutgeamacentlorasion Dnooileat lon (UtArolicstson sDesoileation.png

SceneDelegate文件处理:

  1. SceneDelegate.h里:

#icport UTKi+UTKit.h.png 2. SceneDelegate.m里:

Pasted Graphic 9.png 针对Info.plist文件的说明:

Pasted Graphic 10.png