相关知识:

https://blog.csdn.net/BUG_delete/article/details/103699563

'AppDelegate' is only available in iOS 13.0 or newer

The correct code is

let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate

add @UIApplicationMain this as well.

remove ().

It seems you might set the following

@available(iOS x.x, *)
@UIApplicationMain

In your AppDelegate

you can remove that or you can change the minimum deployment target with your supportive iOSversion

比如公司现在新开一个项目,使用此App的最低版本要求是iOS12。

(也就是说这个App上架后,只有iPhone的iOS版本是12以上的用户才能在App Store里面看到并下载)

这个时候如果我们使用的是最新版Xcode11并且只按默认配置开发的话,会出现以下错误:

'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
...
 
 

需要做一些小小的改动:

1.新建项目时,在User Interface这里选择Storyboard

 
 

说明:

Xcode11默认使用SwiftUI来做App的界面,但SwiftUI这个功能的最低要求版本是iOS13。

目前SwiftUI还有很多地方不太完善,个人建议如果是商业项目的话,还是选择Storyboard。因为他目前仍旧是苹果性价比比较高的一种快速开发界面的方法(较成熟+上手快)。

2.项目target这里的Deployment Target选择App要求的最低版本,比如上文提到的iOS12

 
 

说明:

这个相信大家应该轻车熟路了:App要求的最低版本是多少,这里就选多少,不再赘述。

本以为这样就差不多了吧。

Surprise!编译之后错误依旧

[图片上传中...(image-308aec-1571841138041-7)]

<figcaption></figcaption>

罪魁祸首其实就是这两个文件:AppDelegate.swiftSceneDelegate.swift

关于iOS13有改动或新登场的这两个文件,在我的每个教程的SwiftUI部分都有讲到,欢迎大家来捧捧场: m.cctalk.com/inst/s9vfhe…

 
 

好,继续。

3.从左边的错误点进去或者直接点目录进入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, *)

4.从左边的错误点进去或者直接点目录进入SceneDelegate.swift文件,选择任意一个红圈白点,点击Add @available attribute to enclosing class的Fix

 
 

说明:

SceneDelegate.swift文件是iOS13新登场的,所以给整个class加上@available(iOS 13.0, *)是OK的:

 
 

选择低于iOS13版本的模拟器或者真机运行之后,还是不行:

黑屏

并且控制台会出现:

The app delegate must implement the window property if it wants to use a main storyboard file

原因:

在iOS13中,AppDelegate把iOS13之前的那些管理整个App生命周期等的任务都委托给了SceneDelegate,所以原来AppDelegatewindow属性自然也就跑到SceneDelegate里面去了:

 
 

而这个SceneDelegateclass又被我们标注了只能iOS13可以用,也就是说iOS13以下版本的iPhone是不会执行整个SceneDelegateclass的代码的,所以在低版本中系统就找不到window属性。

解决方案:

AppDelegate的class里面声明window属性:

 
 

其实很容易理解,窗口没了,我们自然看不到外面的风景了,取而代之的就是黑屏

这样之后:

iOS13以下版本的时候,window就走AppDelegate这里,不会黑屏;

iOS13或以上版本的时候,window就走SceneDelegate(被委托人)这里,不会黑屏;

原文:https://www.jianshu.com/p/3de524451fe0

在Xcode11上开发“面向低于iOS13版本的App”时的一些注意点的更多相关文章

  1. iOS10 开发权限适配设置 崩溃(上传打包后构建版本一直不显示)

    ios10 系统必须强制配置系统权限 如果不配置,调试的时候导致崩溃,还会引发包无效的问题,导致上传打包后构建版本一直不显示 解决方案1.在项目中找到info.plist文件,右键点击以 Source ...

  2. Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始

    时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...

  3. 在Visual Studio上开发Node.js程序

    [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...

  4. Git是目前世界上最先进的分布式版本控制系统

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  5. 在远程系统上开发 SharePoint 应用程序

    适用范围: apps for SharePoint | Office 365 | SharePoint Foundation 2013 | SharePoint Server 2013 使用远程安装的 ...

  6. PhoneGap 在eclipse上开发Android程序

    本文将记录在Eclipes上开发Android App,在使用的方法是Hybrid App(混合模式移动应用), 由于本人的工作需要,将要开发在车间使用的数据录入程序,但是其中有非常多的逻辑验证和判断 ...

  7. Smobiler 4.4 更新预告 Part 1(Smobiler能让你在Visual Studio上开发APP)

    在4.4版本中,大家对产品优化的一些建议和意见进行了相应的优化和修复,同时,还新增了一些令人激动的功能和插件. 下面先为大家介绍4.4版本中Smobiler的优化和修复: 优化 1, PageView ...

  8. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理

    C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理 当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学 ...

  9. 在Visual Studio 2013 上开发Node.js程序

    [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...

随机推荐

  1. 欧拉函数 BZOJ2705

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 3154  Solved: 1968[Submit][ ...

  2. 仿开源框架从零到一完整实现高性能、可扩展的RPC框架 | 6个月做成教程免费送

    去年年就在写一本付费小册,今年年初基本上就写完了,本来预计计划是春节上线结果由于平台的原因一直拖着没上.五一前跟平台联系给的反馈是五月份能上,结果平台又在重构,停止小册的申请和上线,最后我考虑了一下决 ...

  3. 面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧

    接上一篇:30分钟快速上手Docker,看这篇就对了! 一. 带着问题学Dockerfile 1.疑问 我们都知道从远程仓库可以pull一个tomcat等镜像下来,然后docker run启动容器,然 ...

  4. PHP SESSION 操作

    Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start().session_start()函数的语法格式如下: Bool sess ...

  5. C# 数据操作系列 - 19 FreeSql 入坑介绍

    0. 前言 前几天FreeSql的作者向我推荐了FreeSql框架,想让我帮忙写个文章介绍一下.嗯,想不到我也能带个货了.哈哈,开个玩笑-看了下觉得设计的挺有意思的,所以就谢了这篇文章. 简单介绍一下 ...

  6. 小智的旅行(Bridge)51nod 提高组试题

    luogu AC传送门(官方数据) 题目描述 小智最喜欢旅行了,这次,小智来到了一个岛屿众多的地方,有N座岛屿,编号为0到N-1,岛屿之间 由一些桥连接,可以从桥的任意一端到另一端,由于岛屿可能比较大 ...

  7. Win2003远程桌面突然无法连接,有没有解决方法?

    在日常工作中,运维人员除了接触服务器监控工具外,最常用的应该就是远程桌面了吧.iis7远程桌面是一款绿色小巧的服务器管理工具,更加人性化,管理服务器更是不可测量. 可以管理1000台服务器的远程桌面: ...

  8. vue 中<vue-scroll >滚动条回到顶部

    今天项目碰到一个<vue-scroll >滚动条要回到顶部的需求,查询了好久终于解决了,这里记录一下: 其实就是scrollIntoView()方法的使用(官方文档): 需要注意的是要求页 ...

  9. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  10. java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字

    Date date = new Date(0); System.out.println(date); 打印出来的结果: Thu Jan 01 08:00:00 CST 1970 也是1970 年 1 ...