Xcode 11新建工程.--iOS 13 SceneDelegate適配

收錄文章::::::::::::::: iOS 13 適配要點總結(jié)

在Xcode 11 創(chuàng)建的工程,運行設(shè)備選擇 iOS 13.0 以下的設(shè)備,運行應(yīng)用時會出現(xiàn)黑屏現(xiàn)象。
原因:
Xcode 11 默認是會創(chuàng)建通過 UIScene 管理多個 UIWindow 的應(yīng)用,工程中除了 AppDelegate 外會多一個 SceneDelegate
AppDelegate和SceneDelegate這是iPadOS帶來的新的多窗口支持的結(jié)果,并且有效地將應(yīng)用程序委托的工作分成兩部分。
也就是說在我們用多窗口開發(fā)iPadOS中,從iOS 13開始,您的應(yīng)用代表應(yīng)該:

設(shè)置應(yīng)用程序期間所需的任何數(shù)據(jù)。
響應(yīng)任何專注于應(yīng)用的事件,例如與您共享的文件。
注冊外部服務(wù),例如推送通知。
配置您的初始場景。
相比之下,在iOS 13中的新頂級對象是一個UIWindowScene,場景代表可以處理應(yīng)用程序用戶界面的一個實例。因此,如果用戶創(chuàng)建了兩個顯示您的應(yīng)用程序的窗口,則您有兩個場景,均由同一個應(yīng)用程序委托支持。
這些場景旨在彼此獨立工作。因此,您的應(yīng)用程序不再移動到后臺,而是單個場景執(zhí)行 - 用戶可以將一個移動到后臺,同時保持另一個打開。

我們可以看下info.plist文件和工程項目文件的變化如圖:

image
image
  1. Appdelegate新增windows屬性

適配方案一

如果我們不開發(fā)iPadOS多窗口APP,SceneDelegate窗口管理我們可以不需要直接刪掉就好了。

  1. 刪除掉info.plist中Application Scene Manifest選項,同時,文件SceneDelegate可刪除可不刪
  2. 相關(guān)代碼注釋掉
  3. Appdelegate新增windows屬性

適配方案二

即要用iOS 13中新的SceneDelegate,又可以在iOS 13一下的設(shè)備中完美運行。那就添加版本判斷.

  1. SceneDelegate中添加@available(iOS 13, *)
  2. AppDelegate中同樣聲明window屬性
  3. AppDelegate中兩個關(guān)于Scene的類也添加版本控制,oc/Swift中可以用擴展單獨拎出來
  4. 切記:這種方式,AppDelegate中的有關(guān)程序的一下狀態(tài)的方法,iOS 13設(shè)備是不會走的,iOS13一下的是會收到事件回調(diào)的。13以上的設(shè)備會走SceneDelegate對應(yīng)的方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容