好比公司如今新开一个项目,使用此App的最低版本要求是iOS12。swift
(也就是说这个App上架后,只有iPhone的iOS版本是12以上的用户才能在App Store里面看到并下载)bash
这个时候若是咱们使用的是最新版Xcode11而且只按默认配置开发的话,会出现如下错误:app
'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
...
复制代码
Storyboard
说明:spa
Xcode11默认使用SwiftUI来作App的界面,但SwiftUI这个功能的最低要求版本是iOS13。3d
目前SwiftUI还有不少地方不太完善,我的建议若是是商业项目的话,仍是选择Storyboard
。由于他目前仍旧是苹果性价比比较高的一种快速开发界面的方法(较成熟+上手快)。code
这个相信你们应该轻车熟路了:App要求的最低版本是多少,这里就选多少,再也不赘述。cdn
Surprise!编译以后错误依旧视频
AppDelegate.swift
和SceneDelegate.swift
。关于iOS13有改动或新登场的这两个文件,在个人每一个教程的SwiftUI部分都有讲到,欢迎你们来捧捧场: m.cctalk.com/inst/s9vfhe…blog
好,继续。教程
AppDelegate.swift
文件,拉到最后的两个方法那里:Add @available attribute to enclosing instance method
,点Fix说明:
--从错误的字面意义上就能够得知,无非就是一些类型只能在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
文件,选择任意一个红圈白点,点击Add @available attribute to enclosing class
的FixSceneDelegate.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开发的话,能够来看看小弟的iOS视频教程(永久更新+售后辅导): m.cctalk.com/inst/s9vfhe…