转自:https://www.jianshu.com/p/8659851b5e94
在Xcode 11 创建的工程,运行设备选择 iOS 13.0 以下的设备,运行应用时会出现黑屏现象。
原因:
- Xcode 11 默认是会创建通过 UIScene 管理多个 UIWindow 的应用,工程中除了 AppDelegate 外会多一个 SceneDelegate
- AppDelegate和SceneDelegate这是iPadOS带来的新的多窗口支持的结果,并且有效地将应用程序委托的工作分成两部分。
也就是说在我们用多窗口开发iPadOS中,从iOS 13开始,您的应用代表应该:
- 设置应用程序期间所需的任何数据。
- 响应任何专注于应用的事件,例如与您共享的文件。
- 注册外部服务,例如推送通知。
- 配置您的初始场景。
相比之下,在iOS 13中的新顶级对象是一个UIWindowScene,场景代表可以处理应用程序用户界面的一个实例。因此,如果用户创建了两个显示您的应用程序的窗口,则您有两个场景,均由同一个应用程序委托支持。
这些场景旨在彼此独立工作。因此,您的应用程序不再移动到后台,而是单个场景执行 - 用户可以将一个移动到后台,同时保持另一个打开。
适配方案一
如果我们不开发iPadOS多窗口APP,SceneDelegate窗口管理我们可以不需要直接删掉就好了。
- 删除掉info.plist中Application Scene Manifest选项,同时,文件SceneDelegate可删除可不删
- 相关代码注释掉
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { } //注释掉这两个方法。
3. Appdelegate新增windows属性
var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { //如果是用默认的storyboard,下面的代码可以不写 // window = UIWindow.init() // window?.frame = UIScreen.main.bounds // window?.makeKeyAndVisible() // window?.rootViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController() return true } ///做完这些就跟以前一样啦。
适配方案二
即要用iOS 13中新的SceneDelegate,又可以在iOS 13一下的设备中完美运行。那就添加版本判断,利用@available
SceneDelegate中添加@available(iOS 13, *)
import UIKit @available(iOS 13.0, *) class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? ......
AppDelegate中同样声明window属性,并把AppDelegate中两个关于Scene的类也添加版本控制,Swift中可以用扩展单独拎出来
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? ///didFinishLaunchingWithOptions中添加版本判断 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if #available(iOS 13, *) { }else { window = UIWindow.init() window?.frame = UIScreen.main.bounds window?.makeKeyAndVisible() window?.rootViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController() } return true } } @available(iOS 13.0, *) extension AppDelegate { // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { } }
相关推荐
全新版本全新工具-进击Apple IOS 13的SwiftUI开发实战,使用最新的Mac OS X集成开发工具Xcode11进行SwiftUI构建用户界面,让同学们最近的距离接触IOS与用户界面开发。课程分为了SwiftUI开发的基础部分与进阶部分,...
iOS 11 Programming Fundamentals with Swift Swift, Xcode, and Cocoa Basics 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
1. 书名:《IOS 11 Programming Fundamentals with Swift》是关于iOS 11操作系统下,使用Swift编程语言进行编程基础教学的一本书籍。这本书由Matt Neuburg编写,是该书的第四版。 2. 描述:该书在***上可以购买,...
《iOS 11 by Tutorials v1.0》是一份专为想要深入学习iOS开发,特别是针对iOS 11、Swift 4以及Xcode 9的开发者精心编写的教程资源。这份资料详尽地涵盖了从基础到进阶的多个主题,旨在帮助开发者充分利用苹果最新...
最新iOS11开发教程swift4+xcode9,iOS 11开发概述 iOS 11新特性 编写第一个iOS 11应用 4 创建iOS11项目 4 运行iOS11程序 7 iOS11模拟器介绍 iOS11Main.storyboard文件编辑界面 编写第一个iOS11代码Hello,World 15 ...
总结来说,RxSwift-Xcode8 & swift3.2的学习对于希望提升iOS开发能力的开发者来说是一个非常好的选择。通过学习和应用RxSwift,开发者能够更好地应对异步编程的挑战,编写出更加清晰、健壮和易于维护的代码。同时,...
xcode8调试IOS11 Shift+Command+G进入 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 把解压后的文件复制进去。
《 Beginning iOS 11 Programming with Swift - Simon Ng》是一本专为初学者设计的iOS开发指南,由Swift编程语言的角度出发,深入浅出地讲解了如何在iOS 11平台上构建应用程序。这本书对于想要踏入iOS开发领域的...
在iOS开发中,Xcode是Apple官方的集成开发环境(IDE),Swift则是一种强大的编程语言,用于构建iOS、macOS、watchOS以及tvOS的应用。XCFramework是苹果引入的一种新框架格式,允许开发者创建单一的框架包,可以在多...
《iOS 10 in Swift 3》是一本深入探讨iOS开发的专业书籍,专注于利用Swift 3编程语言在iOS 10平台上构建应用程序。Swift 3是Apple推出的一种现代化、安全且强大的编程语言,旨在简化iOS、macOS、watchOS以及tvOS的...
开发iOS应用离不开Xcode IDE,书中会详细介绍如何使用Xcode创建项目、调试代码、构建用户界面以及发布应用到App Store。Xcode的Interface Builder和Swift Playgrounds也是学习的重点。 4. **UIKit框架**: UIKit...
[MG] iOS Apprentice V8.0 内容详实适合初学者, 更新支持 Xcode 11, Swift 5.1, iOS 13, SwiftUI. 账号限制, 分卷分享, 单独下载无法解压, 此为分卷2. 资源来自互联网, 仅供学习, 请勿用作商业用途, 侵删.
[MG] iOS Apprentice V8.0 内容详实适合初学者, 更新支持 Xcode 11, Swift 5.1, iOS 13, SwiftUI. 账号限制, 分卷分享, 单独下载无法解压, 此为分卷3. 资源来自互联网, 仅供学习, 请勿用作商业用途, 侵删.
[MG] iOS Apprentice V8.0 内容详实适合初学者, 更新支持 Xcode 11, Swift 5.1, iOS 13, SwiftUI. 账号限制, 分卷分享, 单独下载无法解压, 此为分卷1. 资源来自互联网, 仅供学习, 请勿用作商业用途, 侵删.
通过阅读本书,你将学习 Swift 面向对象的概念、理解如何使用 Apple 的开发工具,以及探索 Cocoa 是如何提供 iOS 应用所需的底层功能的。
【标题】"12.1的iOS的Xcode包"主要指的是针对苹果操作系统iOS 12.1版本的开发工具Xcode的一个特定版本。Xcode是Apple官方为开发者设计的一款集成开发环境(IDE),用于创建iOS、macOS、watchOS以及tvOS的应用程序。...
在iOS开发过程中,Xcode是Apple官方提供的集成开发环境(IDE),它包含了编写、调试以及发布iOS和macOS应用程序所需的所有工具。Xcode 15.2是该软件的一个特定版本,提供了对最新iOS功能和技术的支持。在这个"iOS ...
《iOS Apprentice v6.0 (Swift 4 and Xcode 9)》是为初学者设计的一套全面的iOS开发教程,特别关注Swift 4编程语言和Xcode 9集成开发环境的使用。在这个版本中,你将学习如何利用最新技术构建高质量的iOS应用。 ...
然而,有时升级Xcode到最新版本可能会带来其他问题,比如与现有项目代码的不兼容,或者需要重新配置开发环境。因此,提供一个针对特定iOS版本的配置包,可以避免这些潜在困扰。 这个名为"11.0 (15A372)"的文件很...