版本记录
版本号 | 时间 |
---|---|
V1.0 | 2019.07.04 星期四 |
前言
每年的WWDC开发者大会都是科技圈的重大事件,都会得到全世界的关注,前几年有时候会熬夜看,今年没有熬夜看,我还是看回放吧,有时间也就总结了下,权当整理和了解吧。感兴趣的看下面几篇文章。
1. 苹果大会(一) —— 2018年6月(一)
2. 苹果大会(二) —— 2018年9月(一)
3. 苹果大会(三) —— 2019年6月(一)
WWDC 2019 Top 10 Videos
首先看下写作环境
Swift 5, iOS 13, Xcode 11
有关最新API的视频,如ARKit 3,RealityKit,SwiftUI,Combine
和iPad上的多窗口支持。还有更多的覆盖工具,如Catalyst,Xcode 11,Swift Package Manager,Accessibility Inspector
和Simulator
。有超过100个会话视频,你从哪里开始?
不要害怕! 这里已经收集了年度十大视频列表供观看。
注意:要在更短的时间内观看更多视频,我们建议您从WWDC视频站点WWDC Videos Site下载视频,然后使用
VLC Media Player
或QuickTime Player
以1.5x
或2.0x
速度重播它们。
1. Platforms State of the Union – Session 103
Platforms State of the Union
始终是一个开始的地方。它提供了Apple在WWDC剩余会话中涵盖的许多新功能的概述。如果你没有别的时间,这是值得关注的!
今年的演讲重点介绍了三个方面的变化:
-
1) Developer Productivity:这里的重大新闻是
SwiftUI
,以及Swift
和Xcode
的新支持。-
SwiftUI
是新玩具中最闪亮的,下面将详细介绍。 -
Xcode
在支持实时开发,实时预览,新编辑器布局,改进文档,测试计划等方面进行了重大改进。 - 对Swift的更改为
Xcode
和GitHub Package Registry
中的Swift包带来了ABI
和Module
稳定性以及一流的支持。
-
-
2) Platforms:除了
SwiftUI
之外,每个平台上都有大量新功能。-
macOS Catalina
包含Catalyst
,它简化了将iPad应用程序引入Mac的过程。 Apple还在这个新版本中将系统volume
设置为只读,将系统提供的位与用户应用程序和数据分开,以提高安全性和可靠性。 -
watchOS 6
声明独立于phone
。现在可以在没有配套iOS应用程序的情况下为手表构建应用程序。 -
iOS 13
带来了可用性功能,如快速键盘和新的UI功能,如暗模式,共享表,卡片,语义颜色,自适应材料和新的符号库。 -
iPadOS
包括新的iPad特有功能,如改进的多任务处理,窗口场景,PencilKit
和新手势。
-
-
3) Core Technologies:与往常一样,今年对每个平台上的核心API进行了大量改进。
-
Accessibility
:Apple在今年WWDC期间主要关注Accessibility
,以鼓励开发人员更多地关注它。它们使accessibility
功能更易于用户发现。并且,他们实现了语音控制,它使用设备上的语音识别和一些专门的命令来实现设备的完全免提操作。 -
Privacy
:Core Location
现在允许用户选择允许应用仅使用一次位置信息。此外还有“Sign in with Apple”
服务,该服务允许应用程序使用现有的Apple ID
注册用户。 -
Machine Learning
:Apple
扩展了现有Vision
,Natural Language
和Speech ML
框架的功能。这些新功能允许应用程序判断图像显着性,执行文本识别,在设备上处理语音等等。CoreML
包括对100多种新模型层类型的支持,现在允许对模型进行设备内个性化。 -
Siri
:Siri Shortcuts
现在是会话式的,允许他们处理参数。 -
AR
:ARKit 3
可同时使用相机,人物遮挡和动作捕捉。RealityKit
和Reality Composer
提供了一种将AR功能集成到应用程序中的简单方法。 -
Metal
:iOS Simulator
现在完全支持Metal应用程序。
-
2. Great Developer Habits – Session 239
即使苹果今年给我们带来了所有令人难以置信的闪亮新玩具,本次会议也是我们团队认为对您来说最重要的一次。它综合了与世界各地开发人员进行的多次对话的结果,并为将日常工作流程中的许多习惯融入其中而提供了理由。
讲座将这些习惯分为八类:
- 1) Organize:保持
project
和workspace
清洁。这意味着使用Xcode
组,故事板引用和新的构建系统。它意味着将警告视为错误,而不是将其检入。 - 2)Track:始终使用源代码管理。使您的提交变小并且本地化。写
GOOD
提交消息。把它们想象成你未来的自我。 - 3)Document:再次思考你未来的自我,写下评论,回答你为什么以你的方式实施某些事情的问题。出于同样的原因编写API文档。
- 4)Test:编写单元测试。去做就对了。并确保您实际使用它们。
- 5)Analyze:使用Xcode提供的工具,如
Network Link Conditioner, the debug gauges and Instruments
。使用sanitizers and checkers
,只要有可能就将它们打开。 - 6)Evaluate:进行代码审查。如果您是独立开发人员,请找人帮忙。了解每个变化。build它。运行测试。校对。
- 7)Decouple:使用包和框架将代码分解为更容易维护的部分。这样做可以更轻松地扩展或共享代码。但是,这意味着文档是至关重要的。
- 8)Manage:管理您的依赖项。了解他们对用户数据的处理方式。如果他们破裂或消失,请制定计划。并且对于它们包含的每个依赖性都知道相同。
3. Introducing SwiftUI: Building Your First App – Session 204
SwiftUI: Less code. Better code. Everywhere.
这是苹果公司对SwiftUI
的口头禅,而不仅仅是营销炒作。在某些方面,SwiftUI
对于开发人员而言可能比Swift本身的引入更具革命性。本次会议介绍了这个新框架,并展示了从头开始构建应用程序。它强调了SwiftUI的强大功能以及开发用户界面的新方法。
当然,在一次会议中可能无法涵盖这么大的内容。一旦你看到这个,你还有五个可以让你真正开始了解如何让SwiftUI
为你工作。按顺序,它们是:
- 1) SwiftUI Essentials – Session 216
- 2) Data Flow Through SwiftUI – Session 226
- 3) Integrating SwiftUI – Session 231
- 4) Building Custom View with SwiftUI – Session 237
- 5) SwiftUI On All Devices – Session 240
即便如此,这并不是所有可用的SwiftUI
内容。关于accessibility
和watchOS
支持等主题的会议有很多。利用下载这些会话的幻灯片的功能。你会一遍又一遍地参考它们。
4. Modern Swift API Design – Session 415
本次会议介绍了一些设计Swift-only API
的新兴最佳实践。 既然Swift
提供了ABI(Application Binary Interface)
和模块稳定性,那么最终可以完全在Swift中构建系统框架。 SwiftUI
和RealityKit
是两个闪亮的例子。
Swift API
设计的总体指导原则与2016年Apple首次发布其Swift API
指南时的整体指导原则相同:使用时的清晰度。 虽然这显然意味着必须明确命名,但这也意味着必须明确使用。
该会话讨论了在值和引用语义之间进行选择的最佳实践,或两者的混合,例如写时复制值语义。 它继续讨论协议和泛型的适当使用,并识别常见的滥用情况。
最后,它展示了动态密钥路径成员查找和属性包装器如何协同工作以启用SwiftUI
使用的一些很酷的新功能。
5. What’s New in Xcode 11 – Session 401
本次会议展示并演示了许多Xcode 11
的新功能。它首先演示完全重新考虑编辑器启用的新工作流程。 Xcode现在拥有尽可能多的独立编辑器,每个编辑器都有自己的模式和内容。画布和助理编辑器将合并到编辑器窗格中,并仅在有要显示的内容时显示。垂直和水平分割您的工作区多次。
Xcode 11
现在还提供Swift Package Manager
的完全集成。 Swift包是class citizens
,无论是在Xcode还是在流行的存储库中,如GitHub,GitLab
和Bitbucket
。从CocoaPods
迁移到SwiftPM
再简单不过了!
该会议还涵盖了其他Xcode改进的大杂烩,包括Git stash
和cherry-pick
,故事板中的Mac设备支持,目录中资产的本地化,环境覆盖,更好地跟踪仪器中的os_signpost
日志记录等等。
6. Introducing Combine – Session 722
本次会议介绍了新的Combine
框架。用Apple的话来说,Combine是“一个统一的,声明性的API,用于随着时间的推移处理值。”第三方反应式编程框架的粉丝会说,“但是,我们已经拥有了这个!”,Combine
令人兴奋的是它不是第三方框架。作为基本操作系统的一部分,您最终可以获得许多异步编程问题的声明性解决方案。
Combine
以发布者,订阅者和运营商的角度来思考。正如您所料,发布者是值的来源,并定义了如何生成值和错误。订阅者向Publishers
注册以接收这些值。运营商充当发布者和订阅者,转换从发布者接收的值并将其向下游发送到订阅者。操作员的这种“双重身份”使他们能够被链接在一起以处理更复杂的数据流。
Combine
提供了许多预定义的运算符,Apple
称之为Declarative Operator API
。这些运算符分为功能区域,如转换,列表操作,错误处理,线程或队列移动,以及时间和调度。
与SwiftUI
一样,关于Combine
还有更多关于适合一个会话的内容。一旦您准备好使用Combine做更多事情,请观看会话721,Combine in Practice。而且,如果您是“反应性”编程的新手,请准备好多次观看这些会话!
7. Advances in UI Data Sources – Session 220
任何使用UITableView
或UICollectionView
编写过许多应用程序的人几乎肯定遇到过数据模型与UI不同步时出现的可怕崩溃。即使你很幸运没有看到这次崩溃,你也遇到了让它们保持同步并对UI进行增量更新的困难。
本次会议介绍了一种新方法:可扩展数据源。这些工作通过使用新的三步过程:创建快照,填充该快照,调用apply()
。这很简单!
快照中的数据项由唯一的持久标识符标识,而不是由IndexPaths
标识。有效标识符的唯一要求是它必须是唯一的,并且必须符合Hashable
。由于使您自己的Swift结构值满足这些要求是微不足道的,因此可以直接使用模型值,而不是根据标识符查找它们。这可以大大简化您的代码。
由于许多table view and collection view
委托方法仍然通过IndexPath
引用单元格,因此有一个API
可以在IndexPath
和identifier
之间进行转换。
一旦您使快照反映了数据模型的新状态,您可以通过调用apply()
将更新放在屏幕上。系统负责处理插入和删除操作,同时提供流畅的自动动画。当然,如果用户体验过这种动画,您可以禁用动画。最重要的是,你可以在后台线程上调用apply()
!唯一的限制是您必须始终在后台线程或主线程上调用它。
8. What’s New in Swift – Session 402
自去年6月WWW 2018
年以来,Apple已经完成并发布了Swift 5.0
,并且Swift 5.1
作为Xcode 11
的一部分处于测试阶段。本演讲重点介绍了Swift在过去一年中的一些变化。
最重要的新功能之一是ABI
- 应用程序二进制接口 - Swift 5.0
中的稳定性。这允许程序使用与构建程序本身的编译器不同的编译器构建的框架。 Swift 5.1引入了模块稳定性,使Swift模块和导入它们的程序能够使用不同的编译器版本构建。这使得捆绑框架和Swift运行时与操作系统相匹配 - 与Objective-C存在的世界状态相匹配 - 从而提供更小的二进制文件和更快的应用程序启动。
将Swift运行时与操作系统一起使用也可以获得其他性能优势。现在,Apple可以优化桥接所谓的货币类型 - 常见类型(如字符串和字典),从而显着提高桥接性能。
Swift 5.0
改变了编译器表示字符串的方式;它们现在编码为UTF-8而不是UTF-16。如果您依赖于String的基础表示,则可能在您自己的代码中遇到过此问题。此更改允许与C API更简单的互操作性,因为字符串不再需要转换。它还允许在String
和NSString
类型之间更快地进行桥接,从而提高整体应用程序性能。例如,由于这种变化,SwiftNIO
的吞吐量增加了20%
。
该会议还讨论了工具改进,例如SourceKit
中官方支持的Docker镜像和Language Server Protocol (LSP)
支持。它还介绍了一些已经批准或正在审核的新语言功能,这些功能可以实现一些很酷的新技术,例如Swift UI
。
9. Adopting Swift Packages in Xcode – Session 408
如上所述,Xcode 11
现在支持使用Swift Package Manager(SPM)
来管理外部开源软件包的依赖关系。本次会议首先演示了向Xcode项目添加依赖项是多么容易。
与其他依赖关系管理器类似,SPM
使用清单形式来定义包。对于SPM,该清单是一个名为Package.swift
的文件。除此文件外,程序包还包含Sources
目录和Tests
目录,每个目录包含程序包定义的每个目标的其他目录。源可以用Swift,C,C ++和Objective-C的任何组合编写。默认情况下,包构建为静态库并直接链接到生成的应用程序可执行文件中。
Swift Package Manager
使用语义版本控制semantic versioning来实现包的版本控制。这提供了在包解析期间的逻辑,智能版本选择。 SPM使用修饰符.upToNextMajor(from :)
和.upToNextMinor(from :)
来控制版本选择。 Xcode在其对话框中暴露了同样的能力。
更新到最新的合格软件包版本更简单:单个菜单命令。如果您熟悉从命令提示符使用SPM
,则与执行swift
包更新相同。版本控制的神奇之处在于一个名为Package.resolved
的文件,其中SPM记录了它解析的每个包的确切版本。您应该确定并将此文件检入您的源代码管理系统,以确保您团队中的每个成员都使用相同的版本。
如果要创建自己的包,请查看会话410, Creating Swift Packages。
10. Introducing Sign In with Apple – Session 706
Sign In with Apple
是一项新服务,使您的应用程序能够为您的用户提供简化的帐户设置。它允许您的用户点击一个按钮,快速批准您请求的信息,并通过Apple进行身份验证。您可以获得极佳的隐私,出色的安全性 - 通过双因素身份验证确保登录安全 - 以及经过验证的电子邮件地址,所有这些都基本上不会对您起作用。
将Sign In with Apple
集成到您的应用程序中包括四个步骤:
- 1) 配置并显示按钮。有几种款式和外观可供选择。
- 2) 当您的用户点击按钮时,创建并发送授权请求。您可以在此处指定所需的其他信息,例如全名或电子邮件。
- 3) 回应验证回调。您会收到许多不同的数据项,包括一个独特,稳定的用户ID和一个“真实用户指示器”,可以让您高度自信地表明该用户是真人而非机器人。使用此信息在您的应用中配置帐户。
- 4) 响应授权状态的变化。
该会话还向您展示了如何最好地用户登录,不仅使用新按钮,还使用现有的iCloud钥匙串密码(如果存在)。如果您的应用要求用户注册帐户,则值得花时间观看此会话并研究幻灯片以实现最友好的用户体验。
还值得注意的是,Sign In with Apple
可以作为JavaScript
库使用,因此您可以将其集成到您可能支持的任何非Apple平台中。
11. LLDB: Beyond “po” – Session 429
该会话解释了在调试程序时用于显示值的三种不同的LLDB
命令。 po
是我们在尝试在Xcode中调试程序时学习的第一个命令。它打印指定变量的对象描述。系统运行时提供默认对象描述,但您可以通过使类型符合CustomDebugStringConvertible
来自定义它。
po
的参数可以是任何可编译的东西。该命令实际上生成了代码片段,这些代码片段使用嵌入式编译器编译并在程序的上下文中执行。它将结果包装在另一个函数中以获取描述。该描述就是它所展示的内容。
接下来,就是p
。可以将其视为“没有对象描述的打印(print without the object description)
”。它与第一个po
结果的效果相同。在进行某种类型的分辨率后,它会将结果传递给相应的格式化程序。 LLDB
为许多常见数据类型提供格式化程序,因此它们的表示符合我们在控制台中的预期。
检查LLDB中的值的第三种方法是v
命令。这是frame variable
命令的别名,它不编译和执行代码。这使得它很快但意味着它不使用与调试程序的源语言相匹配的语法。
通过演示定制或补充内置数据格式化程序的方法来结束会话。并且,它提醒人们,Xcode 11
中的LLDB版本现在使用Python 3
而不是Python 2
作为其脚本引擎。
12. Advances in Collection View Layout – Session 215
这是一个bonus video
在iOS 6中引入集合视图(collection views)
时,它们为更复杂的UI设计打开了大门。 它们的强大之处在于collection view layout
,它将呈现和处理用户交互与item
的实际放置分开。 虽然Apple提供了一个基于行的布局引擎--UICollectionViewFlowLayout
- 构建任何更复杂的东西都需要编写自定义布局类。
但是,自定义布局很难正确。 它涉及许多样板代码,可能很难确保快速的性能。 正确地布置补充和装饰视图看起来像黑魔法。 并且,嵌套collection views
以创建您的设计师所需的滚动行为可能涉及许多late night制定适当的协调。
Compositional Layout to the Rescue!
今年新推出的是UICollectionViewCompositionalLayout
和NSCollectionViewCompositionalLayout
,它提供了一种在Apple所有平台上创建布局的全新方式。 采用compositional
布局时,您可以从较小的单元构建布局,构建更大的组件,直到完成布局为止。
从概念上讲,有四个级别的构建块:items
被收集到groups
中,这些组被收集到各个sections
中,这些部分被收集到最终layout
中。Groups
本身就是项目,允许您嵌套它们。 可以使用闭包来定义布局,该闭合按需销售部分,允许您在单个集合视图中混合完全不同的布局策略。
这个新的布局引擎还有很多东西。 该会话提供了一个可下载的演示应用程序,说明了构建许多复杂布局是多么容易。 观看会话后,一定要理解和使用它!
后记
本篇主要讲述了2019年6月苹果发布会相关的几个视频。