好比公司如今新開一個項目,使用此App的最低版本要求是iOS12。面試
(也就是說這個App上架後,只有iPhone的iOS版本是12以上的用戶才能在App Store裏面看到並下載)算法
這個時候若是咱們使用的是最新版Xcode11而且只按默認配置開發的話,會出現如下錯誤:swift
'ConnectionOptions' is only available in iOS 13.0 or newer
'UIScene' is only available in iOS 13.0 or newer
'UISceneConfiguration' is only available in iOS 13.0 or newer
'UISceneSession' is only available in iOS 13.0 or newer
'UIWindowScene' is only available in iOS 13.0 or newer
...
複製代碼
說明:bash
Xcode11默認使用SwiftUI來作App的界面,但SwiftUI這個功能的最低要求版本是iOS13。微信
目前SwiftUI還有不少地方不太完善,我的建議若是是商業項目的話,仍是選擇Storyboard
。由於他目前仍舊是蘋果性價比比較高的一種快速開發界面的方法(較成熟+上手快)。數據結構
說明:app
這個相信你們應該輕車熟路了:App要求的最低版本是多少,這裏就選多少,再也不贅述。post
Surprise!編譯以後錯誤依舊spa
[圖片上傳中...(image-308aec-1571841138041-7)]3d
<figcaption></figcaption>
關於iOS13有改動或新登場的這兩個文件,在個人每一個教程的SwiftUI部分都有講到,歡迎你們來捧捧場: m.cctalk.com/inst/s9vfhe…
好,繼續。
說明:
--從錯誤的字面意義上就能夠得知,無非就是一些類型只能在iOS13上使用,咱們如今要在低版本的iOS上使用,他天然不幹。
--Add @available attribute to enclosing instance method
的意思是:在class的某個方法前面加上@available(iOS 13.0, *)
,代表只有版本大於等於iOS13的時候才加載這個方法。
--由於AppDelegate.swift
裏的didFinishLaunchingWithOptions
方法是不管什麼版本的iOS都須要用的,因此咱們在Fix的時候不能選擇Add @available attribute to enclosing class
(在整個class前面加上@available(iOS 13.0, *)
)
說明:
SceneDelegate.swift
文件是iOS13新登場的,因此給整個class加上@available(iOS 13.0, *)
是OK的:
而且控制檯會出現:
The app delegate must implement the window property if it wants to use a main storyboard file
在iOS13中,AppDelegate
把iOS13以前的那些管理整個App生命週期等的任務都委託給了SceneDelegate
,因此原來AppDelegate
的window
屬性天然也就跑到SceneDelegate
裏面去了:
而這個SceneDelegate
class又被咱們標註了只能iOS13能夠用,也就是說iOS13如下版本的iPhone是不會執行整個SceneDelegate
class的代碼的,因此在低版本中系統就找不到window
屬性。
在AppDelegate
的class裏面聲明window
屬性:
這樣以後:
iOS13如下版本的時候,window
就走AppDelegate
這裏,不會黑屏;
iOS13或以上版本的時候,window
就走SceneDelegate
(被委託人)這裏,不會黑屏;
給你們推薦一個iOS技術交流羣,羣內提供數據結構與算法、底層進階、swift、逆向、底層面試題整合文檔等免費資料!!!能夠加本人微信拉你進羣!
收錄:原文地址