大多数浏览器和
Developer App 均支持流媒体播放。
-
平台情况纵览
WWDC 2019 平台情况纵览
资源
相关视频
WWDC19
-
下载
下午好 女士们先生们 让我们欢迎主管软件开发的 副总裁 Sebastien Marineau-Mes
大家下午好 欢迎来到 WWDC 大家喜欢上午的 Keynote 讲演吗 那就好 今年是我们对开发者 投入非常大的一年 我们非常期待向你们展示 我们的工作 并且希望了解你们的想法 上午的 Keynote 讲演只是 今年一个小小的前瞻 我们想要分享的还有很多 今天下午 我们将聚焦于和你们 也就是各位开发者们 关系最密切的领域 准备好了解更多了吗 太好了 我们今年已经在开发者的体验 方面向前迈进了一大步 这要归功于新的 SwiftUI 框架 以及在 Xcode 中 出色的交互工具
我们真切地见证了 我们的每一个平台在各自擅长的领域 取得了更深层次的进展 我们在 Mac 上有了 新的更强大的专业功能 全新的深色模式以及大量更新 不好意思 更加独立的 watchOS
在 iOS 上 有新的深色模式和 许多很棒的 App 更新
最后 还推出了 iPadOS 这个强大的操作系统 现在已经独立出来了 不好意思 这边这个提词器出了点问题 好了 那边有一个还能用 所以我还是到左边来吧 这些平台也展现出了 我们的设备的多样性 为其提供良好的支持也是很容易的一件事 这都要归功于 大量的工具和 API 的支撑 如 AutoLayout Size Classes 和 SwiftUI 现在不会再有黑边问题了 只有你们开发出来的 App 能够适应 各种设备的尺寸时 你们的用户才能得到最佳体验 从明年春天开始 App Store 将要求 UI 必须适应 不同屏幕大小 现在 tvOS 提供了许多很酷的新功能
你们也看到了 今年 tvOS 为开发者们 提供了许多很酷的新功能 包括对第三方 App 的 多用户支持 新的 UI 元素及选项 SwiftUI 当然还有 对 Xbox 和 PlayStation 游戏手柄的支持 今天上午我们宣布了 一个无与伦比的新硬件平台 那就是新 Mac Pro 你们喜欢吗 它非常强大 可以解锁很多惊艳的新种类 App
在我们的各个平台上面 我们也构建了很多技术 我们今天就来看一看 在其中一些领域中这些技术的应用 这些领域包括 辅助功能 隐私 机器学习 Siri 增强现实 以及 Metal
我们今天下午主要讲 三个大的主题 首先让我们来看 开发者的生产力 这个房间里的所有人都知道 强大的工具能够 大幅提升生产力 强大的工具能给你们 更多发挥创意的时间 让你们开发更好的 App 这种体验的基础 就是程序设计语言 在过去五年中 Swift 已经变得更加完善 并被植入了所有的 Apple 平台 Swift 本身就是 SwiftUI 的基础
Xcode 不仅是 一个代码的调试工具 不好意思 代码编辑和调试的工具 它包括了你开发 App 时 所需要的一切 它支持你对你的 App 进行 持续的集成及测试 还为你们带来了 探索新技术的工具 比如机器学习和增强现实 最后 以我们的平台 为坚实的基础 SwiftUI 框架会革新 你们构建用户交互界面的方式 这三大元素一起 会把生产力提升到 全新的境界 它们将会深刻地改变 各位开 App 的方式 你们准备好深入了解 SwiftUI 了吗 我们有请 Josh 上台 来进行进一步讲解 Josh 谢谢 Sebastien 好了 说到 SwiftUI 正如大家今天上午所见 它是一个全新的用户交互框架 从 Swift 语言的底层进行革新 并回归 Swift 我们设计它是为了让你们 写可以少写一点代码 并且让你们写的代码更有价值 同时还让你们能在 全部的 Apple 平台上使用这些代码
首先 你们写下的 每一行代码 都具备了更多的功能 这就意味着你们 需要写的代码大大减少了 我们就以这款 为 macOS 选择新的发布名称的 App 为例 我们上午已经见过它了 不过现在先省去动态转场效果 如果你以前曾使用 UIKit 写过 App 你就会知道 需要多少种代码段才能 构建出这个交互界面 其实这个界面上并没有多少视图 但是有许多独立的细节 必须保证它们不能出错 使用 SwiftUI 所需的代码就少多了 不到 20 行代码 集中在 三个关键问题上 首先 用几行代码来定义 视图的结构与布局 然后用一些图像与文字视图 来呈现你的内容
最后 用参数和修饰语句 来调调整体的外观
现在我们来更仔细地 看看其中的几行代码
滚动列表本身 几乎没用什么代码 你只需声明出来这个列表 然后描述表中的每一行 所用到的对象的模型就可以了 省掉了创建 设置 以及 回调 这样的繁琐步骤 界面顶部的图像也可以非常简单地就被呈现出来 你只需放进来一张图片 把它剪成圆形 再添加阴影 不但代码更少了 而且代码更好了 我们设计 API 就是为了 让众望所归的方法成为最佳方法 就好比 创建这个“标签”的 正确代码就是 你不假思索就可以想到的那行代码 它还支持动态字体 深色模式等等 实际上 就连这里用到的 字符串插值也是可以被完全定位的
这种简洁彻底消除了 许多可能会出现的错误 再看看我们的列表 它的每一行会在模型变化时 自动更新 以保证 你的 UI 总是最新的 永远不会以某种老旧的视觉效果呈现给用户 而且它也更易读了 这张圆角半径值为 3 的图片的代码 就证明了这一点
阅读 SwiftUI 代码 你会感觉有人在为你描述这个界面一样 SwiftUI 的代码随处可用 能帮你在所有 Apple 平台上 重复使用更多代码 一直以来 开发者们都可以分享模型以及 底层的绘图和合成代码 但更高层面的 UI 代码 大部分仍然是专属于特定平台的 我们利用 SwiftUI 打破了这一壁垒 让你们能够分享更多 当然你们仍然需要 为每一个独立的平台定制界面 以保证你们的 App 在各平台上都呈现出最佳的效果 但是利用 SwiftUI 的一组 基本的 API 模式 你们只需学习一次这些工具的使用方法 之后就可以在所有地方应用它们 在部署到的每一个平台上 呈现出原生的界面效果
SwiftUI 的设计遵循 四个核心原则 首先是用声明性语法 让 UI 编程从 如何更新屏幕内容 变成了如何描述 你想显示的东西
比如 假设你想要 制作一个标志 它显示为灰色标题型字体 描述这样一个东西 需要许多步骤 这些步骤还需要以特定顺序来编写 但描述你想要的东西 是无需翻译的 比如说 我想要一个 Done 的文本 采用标题型字体 颜色用灰色 SwiftUI 能让你使用 新的声明性语法 进行完全一样的描述 你可以用最少的代码 就描述出你的想法 迭代也变得 比以前快多了 如果你稍后要把这个标志 变成一个按键 只要改动一行就够了 我知道 这很棒
好了 我们的第二条原则 就是我们应该 尽可能地提供 自动功能 这就消除了 大量你曾经需要 手写的代码 我们这个为 macOS 选择新的发布名称的 App 很简单 但它也包括了大量 自动功能 它会自动处理 空格与安全区嵌入 可定位功能以及 从右至左显示语言的布局调整 动态字体与深色模式等等 全部来自一句 最简单的描述 对于一小段代码来说 这配备了相当多的自动功能 但是 还有另外一件事 它非常的重要 需要我们进行 特别地关注 我们现代的交互界面 都是互动式的动画界面 在 SwiftUI 中 同样的 界面在被声明的时候 就被自动地全面地赋予了动画效果
只要一行代码 就可以为所有层级实现动画 无需注记 无需准备 也无需清理 如果你用过 Keynote Magic Move 动画 SwiftUI 动画 和它们一样简单 而且更加强大
至于添加与删除视图 只需要再一行代码 就能描述它们如何 转入和转出了 在动画进行的过程中你的 App 仍然保持 互动与响应 可以随时处理用户输入 如果用户打断了 这些动画 或者 你需要定位到新地点 SwiftUI 也可以自动地 处理这些问题
我们的第三个原则 就是让你可以更容易地学习这种合成型 API 并且可以让开发者能更快地迭代更新
我们已经看到了该如何声明一个独立视图 就像这个文字标签 但其实声明更复杂的视图 也是一样简单 你只需把多个小的代码段 合成在一起就行 我们有水平或是垂直的堆叠型容器 运用这样的容器 只需把几个简单的代码段结合在一起 就可以构建出强大的布局
SwiftUI 还支持视图的属性使用 和成型的语法结构 它使用的是标准的修饰符语法 一组基本的修饰语句 可以应用到任意视图 比如在这里的颜色语句 让文字变成了灰色
使用这种合成型的方式以后 让你只需学习一小组视图与修饰符的 关键词的用法 然后把它们合起来 就可以创建更加强大的界面 我们的最后一个原则 就是你们的界面应该 始终处于前后台一致的状态 你们的 UI 是 App 数据的反映 因此这两者 应该始终保持同步 传统的 API 在这一点上容易出错 但使用 SwiftUI 你们的界面 会在任意时刻随着数据变化而自动更新
你们的数据最可能 从两个地方来 第一种就是来自于模型对象 你可以直接使用已有的 模型对象 只要让它们 遵从新的 可绑定对象协议 唯一的要求就是 你必须指明模型数据何时发生变化 第二个地方就是 临时 UI 状态 比如视图目前是否正处于编辑模式 通过使用 应用于视图上任一属性的简单状态包装器 就可以声明它们 我们都习惯了每个视图上的 每个属性都是可变的 但你一旦开始使用 SwiftUI 就会很震惊地意识到 你的 App 其实只需要 非常少的可变属性 无论你的模型或状态 如何变化 UI 都会 自动更新 因为它都是 Swift 代码 你在获得此行为时 仍然可以直接在 界面声明中使用 模型对象 你甚至能改变并 规定代码行中具体值的格式 而无需额外的中间层 比如 这个字符串插值可以用于 规定日期的格式 成为完全本地化的格式文字 这一切意味着 SwiftUI 能让你写 更少的代码 并获得 更一致的 UI
这就是 SwiftUI 的 四大核心原则 强大的声明性语法 激活了大量 自动功能 合成型的 API 又同时确保了 你的界面始终处于 前后台一致的状态
这个出色的新框架 值得拥有一个优秀的开发工具 我们使用 Xcode 为 SwiftUI 从零开始设计了 全新的工作流 你将获得代码的强大功能 与灵活性 同时还有 UI 工具的易用性 与快速迭代 你将随时获得 两者的好处 而且永远不必 再二选一了 因为这些工具可以有效地运用在 你已有的源代码上面 你将拥有一个美好的开发体验 要真正地了解这个工作流 有多么美妙 你们必须亲眼看一看 我现在邀请 Kevin 上台 为大家做展示 多谢 Josh 大家准备好看点有趣的东西了吗 那么我们开始吧 现在我我想 搭建一个关于远足的 App 并且我想在我的表格视图内 添加另一个视图 来告诉我某条远足线路的难度 所以我们先从总的路线表开始构建 首先我们需要写文本 当我往过拖拽控件的时候 Xcode 会给我一个建议的布局位置 我只需告诉 Xcode 我希望把它放在哪儿 之后 Xcode 会自动地为我建立出这个布局 现在我们需要编辑 这个视图的属性 所以 我只需要在画布的这个位置 单击一下 之后就可以在这儿得到一个 为这个控件定制的 inspector 检查器 让我们把文本缩小一点 现在 看这个位置 看好在我做这个操作的时候代码部分的变化 你可以看到 代码自动地就给我写好了
我们也可以在这边进行同样的操作 在源编辑器里通过编辑代码 来进行更改 你可以看到 Xcode 会 在构建的同时运行我的代码 并更新了右侧的画布
现在不论我在左右哪一侧进行操作 我都可以使用我所有的设计工具 现在我点击一下这个 VStack 之后打开它的 inspector 我可以在这儿接着 调整我想调整的属性 属性更新起来十分快捷 你可能发现这个视图 有几个输入 比如这个标题还有路线的难度 那么 Xcode 怎么样才能知道 在预览中要显示哪些数据呢 这一直是 UI 开发的过程中的一个挑战 在设计的过程中我们究竟要在前台显示什么数据 为解决这个问题 我们开发了 Xcode 预览功能 怎么来预览呢 我来展示给你们我下滑到这个位置
来看这一小段代码 一个预览其实只是 我的 App 中的一段代码 我在设计的过程中配置上这段代码 因为这段代码就在我的 App 里面 所以在整个项目内我都可以用这段代码来预览 并且因为这段代码就在我的项目里 我可以检查并且可以把这段用作预览的代码 分享给我的团队成员们 并且 如果想用不同的数据来调试 也非常容易的 实际上这里的这个 Half Dome 路线难度很高 我们看下把它的难度调成 hard 是个什么效果 而且它是 16 英里 不是 6 英里 这里也改一下 它实际上是在编译我的代码
因为这是 SwiftUI 的代码 所以我可以使用所有的 在其余 UI 开发过程当中的 修饰语句 比如 我们可以看下在 深色模式下效果 而且 我们还有一些 只有预览模块可以使用的修饰语句 默认的预览是 基于设备的显示效果的 当我们在设计表格视图的时候 我们可以只关注表格里的内容 我就这样调一下 可以让尺寸适应这种需求
好了 预览就是这么出色 可以做到很多事情 多到你无法想象 现在 我们用完全不同的数据 来做第二个预览 但我们不能止步于此 我们就这么单击 之后重复操作几次 我们调出来一些常见的 动态类型尺寸 然后配置给单元格 来适用这些动态类型尺寸 就这样 我们就可以同时看到 我的单元格的亮模式 深色模式 以及多种不同动态类型的尺寸下的 显示效果 现在 当我点击这个单元格时 希望进入到的是远足路线细节部分的视图 现在我们转换到细节部分 看一看 通过多年的远足经历 我意识到 永远不要通过一条路线的名字来判断路线的难度 所以对于我来说 能够在详细视图这里面 把图像放大以便查看细节是十分重要的 我已经在这儿事先写好了一些 SwiftUI 的代码 当我们点击上方的横幅图片的时候 我们希望图片可以被扩展放大 我可以在 UI 中测试一下 只需点击开这个播放的按钮 它可以把所有的预览都给呈现出来 而且它是是完全可交互的 我可以点击 并且测试这些不同的放大效果 现在我可以用动画来完善它 这个操作非常简单 我就把我的这段代码 封装进一个 whip animation 的代码段里 现在我就得到了一个 漂亮的默认动画
如果你先要定制这个动画 同样非常容易 现在我们让动画速度变慢 再加一些因热瞩目的效果 这样一来 我们就有了一个炫酷的效果来放大这张图 SwiftUI 的神奇之处在于 每一个动画都是 可取消以及可逆的 并且 App 将始终响应着这些动画效果
好了 现在我们有了一个表格视图内的单元格 并且也给这个单元格建立好了它的详细视图 现在我们把它们放到一起 所以现在我切换到 我最后一次创建出来的一个实例 它有包含了很多不同的线路 并且构成了一个列表 我想做的是 看看我设计完的视图 在真实的设备上是一个什么样的效果 所以只需要点一个按钮 我们点下它之后 Xcode 会自动把我的项目建立到模拟设备上 我把它安上去 之后就会在这个设备上启动我的预览 而且你可以看到 在这边是完全可交互的 那么首先 我们应用一下我们之前写好的单元格样式 我把这个文本 改成路线单元格的样式 现在你可以看到 我们的路线 已经变成之前写好的单元格的样子了 现在我点一下这里 希望能够打开到 我们之前写好的细节视图里 有了 SwiftUI 这一切都非常容易 它会把这件事封装进 一个 navigation button 里 以此来进入到详细视图里面 现在你可以看到 代码部分的 chevron 已经被显示出来 现在我们来具体的看下这个 Snow Creek 线路 我们来看先这个图片部分 这么一看就会发现这条路线布满积雪还很难 看起来不是一条轻松的远足路线 下面我要做的就是用 一行 SwiftUI 代码 来实现“滑动以删除”这个功能 现在 我们这么一滑 就删掉这条线路了 最后呢 我们来看一下 在深色模式内的呈现效果 无需任何多于操作 就会直接把我的预览放进深色模式里 你可以看到 它看起来很漂亮 我们可以点进 Valley floor 这条线路里 进行放大 看起来这个周末 去这儿是个不错的选择 所以就刚这么一会儿 我们就搭建了一个 App 它具备导航功能 动态类型的尺寸 亮模式 深色模式 包含了多个不同的数据 而且可以看到它在真实设备上的效果 并且不需要构建什么或者反复运行来查看效果 这真的非常有趣 好了 Josh 该你继续了 谢谢 Kevin 好了 我们可以发现 对于原生代码而言 这是一种令人难以置信的全新的工作流 你在这个工具当中所做的一切都是可调式 可扩展 可搜索 以及可理解的 并且由于开发者可以直接编辑代码 会使你的工作流具备不可思议的灵活性 并且 SwiftUI 已经深度集成到 我们所有的操作系统当中 所以使用它 可以为你的目标平台 生成一个完全匹配该平台的 App 你可以获得与其他原生 App 相同的效果 相同的性能 以及相同的控件 你可以按照你自己的节奏来熟悉 SwiftUI 你可以用它做任何事情 从编写 App 中的单个视图 到构建整个 App 它可以与现有的 UIKit AppKit 以及 WatchKit 代码无缝衔接 所以 你无需重写任何东西 为了能让开发者们更快的跟上我们的革新 我们的文档团队 开发了一种全新的 可交互文档 它可以很快地教你 一步一步地从建立项目 一直到构建一个 完全可交互的界面 所以任何开发者都可以很快地跟上进度 以上就是 SwiftUI 和 Xcode 里的一些新工具 当然 对于 Swift 和 Xcode 来说 今年是非常重要的一年 所以还有很多内容可以分享给各位 为了告诉你们更多内容 下面我将邀请 Matthew 上台 谢谢
谢谢 Josh 我们今年发布的工具 结合了 Swift 和 Xcode 二者的创新 并且创造出了一些令人惊叹的结果 我们先来说说 Swift
今年是 Swift 发布的第五年 它已经非常成熟了 并且在持续向前飞跃 作为我们最新的旗舰级技术 Swift 可以支撑从机器学习到 增强现实等各个领域 现在 Swift 已经是 我们操作系统的一部分了
为了实现这些 在今年春天的早些时候 我们引入了 ABI Stability ABI Stability 通过共用 Swift 运行时间 来缩小你的 App 的大小 今天 我们再继续讨论一下 模块的稳定性 模块的稳定性是确保兼容性的前提 是的 想要保证兼容性 就需要确保二进制文件 与当前的以及未来的 Swift 编译器可以兼容
此外 Swift 还提供了 许多其它语言的特性 工具版本 性能 以及代码规模方面的改进 这些改进都能进一步扩展 Swift 为你的项目 所带来的潜力
所以 现在 Swift 已经 成为了你开发 App 的首选语言 而且 现在比以往任何时候 都更适合在所有的 Apple 平台上共享公共代码
实际上 共享正是我们开发 Swift 包的原因 它是开发和共享你自己的代码 以及重用他人代码的最佳方式 今天 我们要宣布两件大事
GitHub 将会在 GitHub 包库注册表中 添加对 Swift 包的支持 这种支持真的是相当的完美 因为 Xcode 现在可以无缝地 支持 Swift 包 用它开发出的 App 应用在 iOS iPadOS 以及我们所有平台上面 Swift 包是你的 Workspace 中的 顶层部分 而且它 总是可见的 可理解的 并且是深度集成的 来自社区的包 以及你自己创建的包 可以接入所有的 Xcode 的 工作流当中 并且可以用于 控制源代码 调试 测试 所以内置在 Xcode 当中的 Swift 包 可以以开发者所期待的方式来共享代码
今年仅仅是是 Xcode 的一个新的开端 它的目标就是最大化你的生产力 今天 我们将与各位开发者分享一些改进 因为我们将 Xcode 升级到了第 11 代
让我们从最大的 变化之一开始吧 它就是 Xcode 的 Workspace 我们给了各位开发者完全的编辑和控制 你现在可以以任何你喜爱的方式 来创建和管理你的编辑器的布局 无论你喜欢什么样的 风格和布局 你可以随意地添加或 删除编辑器内的模块
而且更棒的是 你的 Workspace 现在也可以聚焦了 你可以挑任意一个编辑器 把它最大化当你用完以后 直接把它放回去 它就会回到它一开始在的地方 所以现在 不论你是用的是 最小的笔记本电脑 还是用着最大的显示器 你的 Workspace 都可以良好的配合你
现在我们编辑器中的 Related Content 部分 的智能选择 像是 counterparts 功能 就是根据编辑器内容呈现对应效果的功能 现在也得到了巨大的进步
现在有了新的选项 可以选择查看代码对应的预览 画布 实时视图等 你可以给 Workspace 中的 任意编辑器使用 Related Content 功能 我猜你们会相当喜欢这个功能的 当没有内容时 这些呈现相关内容的效果的窗口就会自动消失 你们再也不需要管理它们的可见性
当你弄好 Workspace 之后 剩下的关注点就都在编辑上了 接下来我想向你们快速演示一下 今年我们为各位开发者 提供的一些 源代码编辑方面的特色功能
为了让开发者可以 按照自己喜欢的方式配置每个编辑器 在右上角有一个新的选项菜单
你可以看到 在这个位置 我能够启用 Assistant 或者是任意 Related Content 我可以打开 Code Coverage 或者 Source Control Authors 我打算打开我们的最新的 Mini map 功能
Mini map 这个功能 可以为你展示文件的结构概览 来帮助你定位内容 你可以看到 文本 方法和函数 它使得你在这个文件上的移动 变得非常容易
如果你想在这个文件上 留下一些其他的位置标记 你可以使用 mark 语句段 来添加标签和水平分割符 它会同时显示在你的源文件 和 Mini map 当中
现在我悬停在 Mini map 上 你可以看到文件的 符号化的位置标记 接下来我想给你们一个专业的小提示 按住 command 键 你就能看到 这个文件的所有的位置标记 这可以帮助你非常容易的 到你想要的确切的位置 并且 Mini map 会为告诉你 问题 测试失败的部分 甚至是文件内部发现的结果 我们已经让这些功能触手可及了
你可以发现在 Source Editor 里面 随着我们凸显了基于语法的着色效果 你的代码看起来更加的清晰生动了 你还可以看到我们在这里面 增加了对 斜体 粗体 以及 代码语音上的支持 你还将发现 当你添加文本的时候 他会自动地在你添加完成后 补上可能缺少的参数 更好的是帮助你 保持你的备注文本部分和代码部分可以同步 你会发现当我改了这儿以后 在这个参数应用的范围内同时地都进行了修改 现在 我们还想 提供更多的功能 去帮助你追踪你的修改 如果我想查看 这个文件所有的修改 可以打开这个全新的 Source Control History Inspector 这里可以显示所有 我对这个文件进行的修改 而且我可以快速的跳到任一个提交位置 并且 由于它在检查器里 所以它适用于你项目中的 任何一种文件类型
为了帮助你查看 在本地发生的修改操作 我们还改进了 change bar 这个部分 当我悬停在 change bar 上面 它会显示出在本地发生的修改 但是更进一步的是 现在我可以让显示出我修改前的代码 这是一种快速片段式呈现 因为这是实时动态的 所以当我输入的时候它会还原到最新的状态 上述这些只是 Xcode 11 当中的 Source Editor 的特色功能的一部分
我们继续 测试是开发工作流当中的 另一个关键部分 并且 Xcode 当中已经 为各位开发者编写测试提供了很强大的支持 我想你们都知道的 对吧 因为想必你们已经编写过很多的测试了 是的 的确
太棒了 我想听到的就是这个 现在 你可能不知道的是 Xcode 现在可以为你的测试做到更多 它通过使用 Runtime Issues Runtime Sanitizers 和 Location Simulation 等出色的工具来做更多的工作 我们每年都在增加更多的功能 有了这么多的选择后 我们缺失的是 一种把他们集合在一起并行使用的方法 为了实现这件事 我们添加了 Test Plans
Test Plans 的强大之处在于 它可以让你在许多配置中 运行你的测试
只需要一些简单的选择 你就可以快速地给全世界的使用者开展测试
而且这些配置对于 捕捉 App Store 内的屏幕快照 或者收集你的定位器中的详细信息而言 都是非常完美的
为这个消息鼓掌吧 这的确是一件大事 通过添加 其他的诊断 工具和参数 你就可以从各个角度来查看你的 App
现在你的测试的覆盖率更广了 当你在很多的硬件设备 以及操作系统上进行组合测试时 你可以得到一个全面的综合的视图 来告诉你 你的 App 的运行情况 现在 对于这种规模的测试 Test Plans 可以与 Xcode Server 完美地协调工作 充分利用新 Mac Pro 的优点 来进行 Xcode 在模拟器和 设备上的新的并行测试
Test Plans 带来的效果是 现在你可以用一个指令 来为 App 执行所有测试 这是一个很大的进步
现在 经常做测试和调试的时候 都是有必要复制用户场景的 现在我们全新的 Device Conditions 可以回应这一需求 现在 你可以为设备上的 网络吞吐量和发热状态 设置不同的状态 并查看你的 App 是如何响应的 不过请放心 这些实际上都是模拟的 我们并不会 让你的硬件设备跑出一个超高的温度
你可以在 Xcode 的 Devices 窗口里 启用这些条件 当条件激活时 设备上会显示出一个横幅 你可以点击横幅 来禁用这些条件 当你断开设备连接时 Xcode 将自动终止这些条件
现在对于你将要 进行的所有测试我们还改良提升了 我们还改良提升了 Result Bundles 现在它已经独立了出来 无论是在 Xcode 中创建的测试 还是用命令行中创建的测试 你现在都可以通过邮件来分享它们 把它们附到 Bug 上 然后双击它们 就能在 Xcode 中打开它们并查看细节 现在 为了帮助你进一步改进你的 App 我们引入了两个新的反馈工具 首先是为 iOS 和 iPadOS 中的 App 引入了 App Metrics 即 App 性能指标
当用户选择共享分析时 你会收到匿名的 电池寿命 启动时间 内存占用等各项指标的数据 这些指标与 崩溃和能量日志 一起聚合并显示在 Organizer 里面 这是一种很好的方法 可以助你监视和改进每次构建出来的 App 的性能
这些打包在一起的度量数据 我们从春天的 iOS 12.2 版本就开始收集了 所以你的很多 App 现在应该已经有数据可供你查看了
另外一个重要的 反馈来源就是 直接来自于你的用户 现在 TestFlight App 允许用户分享他们的想法
TestFlight App 将自动地 启用用户反馈功能
当用户在你的 App 中弄了一个屏幕快照后 他们现在有了一个新的选项 来分享他对 beta 版的反馈 还可以添加评论 现在 你可以在 App Store Connect 当中 查看所有的反馈 并为 Bug 追踪系统下载所有的细节
今天讲到的所有的特性 都只是这一版 Xcode 中的一小部分 它集合了 Swift 和 SDK 以及我们所有工具的创新 所有这些都能帮助你 比以往更快地做好工作 这就是 Xcode 11 现在我想再把 Sebastien 邀请请上台 来告诉我们更多关于 Apple 平台的东西 Sebastien 谢谢 Matthew 是不是十分的振奋人心
这些功能的确非常非常棒 可以帮助你们构建更好的 App 现在我们把话题转回到我们的平台 当然 我们的平台 本身就是为提供良好的体验 而量身定制的 并且 平台本身就能体现出来 它们独一无二的使用方式 我们今年想要做的 就是让每个平台可以更加独一无二 我们接下来就深入到 macOS 当中 并且给各位开发者展示下 我们在其中做了些什么革新 macOS Catalina 是一款很棒的桌面操作系统 它拥有一系列 令人瞩目的新功能 比如说屏幕使用时间功能以及全新的音乐 App 并且 Mac 还有了 一个很大生产力方面的特性的提升 那就是加入了 Sidecar 功能 我相信我们都会喜欢上 Sidecar 的 对吧 谢谢大家 好了 Mac 拥有超过 1 亿的 活跃用户 它是一个充满活力的平台 拥有丰富的 App 生态系统 Mac 生态系统中充满了 很多强大的专有的 App 这些 App 是你们使用 AppKit 框架创建的 一个很好的例子就是这款 Pixelmator Pro
现如今 AppKit 已经成为了一个非常 强大的框架 它的存在使得 各位可以调动起 Mac 的全部功能 但是我们还发现 有许多为 iPad 提供的 App 如果把它们放到 Mac 上 去运行的话 将会是相当好的一件事 但是 开发者并不是总有时间 运用 AppKit 去把这些 App 移植到 Mac 上 所以今年 我们引入了 一项新的技术手段 可以让你用最小的代价 就把 iPadOS 上的 App 带到 Mac 上 成为 一款 Mac 上的原生
我们—— 你能把幻灯片往回退两页么 不好意思啊
再退回去一张 好了 对于 Mac 来说 这是进入全球最大的 App 生态当中的的一个巨大机遇 iPad 上有 超过 100 万个 App 我们认为其中很多移植到 Mac 上也会有 很出色的表现
现在为了实现这件事 我们已经将超过 40 个框架和库 从 iOS 上移植到了 Mac 上 如果你现在是一名 iOS 开发人员 并且从未开发过 Mac 上的 App 想必你将会非常喜欢现在 两个平台上面 都有了相同的 API 事实上 我们已经 提供了几乎所有的 iOS 上的 API 只有少数例外的独特的移动方面的功能 没有被移植上去
现在 我们通过将 UIKit 适配成一个本地框架来实现这一点 这使得 iPad App 可以在 Mac 上运行 而且感觉就像平台上的其他 App 一样快速流畅
通过将 UIKit 直接 集成到 macOS 当中 许多基本功能都会是自动的 你不需要多做任何额外的操作 很多的 Mac 桌面以及窗口方面的功能 都会自动帮你适配 并且 我们还为你适配了 许多 Mac 平台独有的功能 像是键盘触控以及鼠标输入等等 这样可以节省下相当巨大的工作量 并且给你的开发提供了一个无与伦比的开端 我们已经花了很多年 来研究这项技术 并且我们把他用在了 我们自己的 App 上 这样 在今年 我们为你们提供 macOS Catalina 版本之前 就可以完善这项技术并证明它的效果了
如果你有一个 iPadOS 上的 App 想要移植到 Mac 平台上将会非常的容易 基本上就需要 3 个步骤
第一步 在 Xcode 里勾选上这个复选框 好了 这个步骤很简单 之后在 Xcode 的 Project Editor 里 为你的项目打开对 Mac 的支持 这样就可以了 就是这么简单 这就是它的神奇之处 这样一来 一个项目及它所构建出来的 App 就可以同时应用到三个平台上面了 当你在源代码中进行修改的时候 所有为三个平台搭建的 App 将自动更新
第二步 就是确保你的 App 在 iPad 上运行良好 更好的 iPad App 也会造就更好的 Mac App 因此 各位开发者为适配基于最新技术及优化的 iPad 的大尺寸屏幕 而做出的努力 可以很好地应用到 Mac 之上
只要你遵循着最佳操作 比如说让你的 iPadOS App 可以支持外接键盘 这样的实践也会带来 更丰富的 Mac 上的体验
第三步 就是利用 Mac 上的特定的功能 这一点也是你为 Mac 进行单独定制 并且最大化利用 Mac 上 典型的特有的优点的一个步骤 你可以利用特有的用户交互元素 像是完整的菜单栏以及工具栏等 并且如果适用于你的 App 的话 你还可以利用上侧边栏及其特殊的素材等等 现在为了给你们展示下这个有多简单 我想再一次把 Matthew 请上台来做一个 demo Matthew 谢谢 Sebastien
现在我们在 iPad 模拟器里 运行着一个 旅行相关的 App 左侧这边有一个位置的列表视图 当我选择一个地点时地球会旋转 我们有一个日志记录的部分 我可以开始在日志上 记录我的旅行
现在 我们就按照刚 Sebastien 所说的 三个步骤 把这个 App 移植到 Mac 上吧
第一步 勾选复选框
我先退出一下这个模拟器 之后在对应的编辑器里面 勾选上 Mac 支持来启用它
就是这样 现在我就可以为 Mac 构建 并运行我的 App 了
通过勾选复选框 我们把 Mac 添加成了一个目的平台 就像我可以为我的 App 在硬件设备和模拟器之间进行选择一样 现在我可以选择 Mac 来运行它了
现在他就是一款 Mac App 了 左面是列表视图 点击选择一个目的地 之后从这儿登录 我知道 这个复选框提供的功能真的很强大 好了 下面我们进入到第二个步骤 制作一个良好的 iPad App
我还没有为我的列表视图 实现任何操作 比如说添加到收藏或者是分享之类的 当我在 iPad 上实现这些功能时 它们会在 Mac 上 显示成一个 context menu 这将会是一个双赢的交互方式
所以我退出这个 Mac App 切换到侧边栏控制器 之后我就添加一个 表格视图委托的方法 好为表中每个项目都设置好菜单的格式
好了 我们进入到第三步
我希望我的 Mac App 的 侧边栏可以是活力动态的 这个变化不会自动地被配置上去 因为这件事需要 开发者去检查 以确保效果是合适的 当你发现它是想要的 只需要一行简单的代码 就可以设置上侧边栏的背景样式了
好了 对于我们最后要做的更改 就是添加一个菜单栏 现在在 storyboard 这里 我打开库之后找一下菜单 我将抓取一个主菜单 之后把它拖到 storyboard 里 之后点开 File 菜单
我想在这里面添加一个菜单指令 是用于登录操作的 我们就给它起名叫 Login 吧 再给他配上一个快捷键组合 就是同时按下 Command 和 L 现在我只需要将 菜单项连接到 我的登录操作上就行了
好的 这样就可以了 让我们构建并运行我们刚做的修改吧 我将暂时隐藏下 Xcode 这样我们就能 看到我们的 App 了
现在我们有了动态的侧边栏 当我选中一项以后 我可以打开一个 context menu 在 File 菜单里 现在也有了登录的操作 所以就这样 三个简单的步骤 只需三个简单的步骤就可以 把我们的 App 带到 Mac 平台上 并且可以为我们的用户提供良好的用户体验 你来继续吧 Sebastien 谢谢 Matthew 这真的是令人难以置信 这难道不会让各位开发者想要去尝试一下么 好吧 实际上 在过去的几周里 我们已经邀请过一些开发人员来进行了尝试 他们在短短几周内取得的成果 真的令人印象深刻 这是他们成功地将 iPad App 运行在 Mac 上的一个例子
每当你做好一个 Mac App 将它分发给你的用户的最好方式 就是把它挂到 Mac 的 App Store 里 这里面拥有最大的 Mac App 的目录 它在全球 155 个国家 提供着服务 并且 Mac App Store 可以让你 触及到每一个 Mac 用户 现在我们还让用户 可以灵活地选择 以什么样的方式来 下载他们想要的 App 并且还能同时帮助他们免受恶意软件的攻击 在 macOS Catalina 这一版本中 Gatekeeper 会验证你从网上 下载下来并运行的 App 就在你初次运行 App 的时候 并且后期会定期验证它们 以此来确定它不是已知的恶意软件 这是通过要求开发者们 使用我们去年发布的 新 App 以及 App 升级的公证服务 公证服务来实现的 这样你和你的用户 就可以安全地从 Mac App Store 以及网络上下载 App 了
公证已经被广泛的采用于多个方面 它既简单又高速 超过 98% 的提交申请 会在 15 分钟内就给出结果
现在说到安全 我们还在持续投资着 macOS 的基础建设 并且我们主要着眼于三个领域
首先是一项新的技术 名为 DriverKit 它允许你将内核的扩展部分 从内核里转移到用户存储空间之中 通过将这些驱动 和拓展程序转换成用户进程来运行 我们可以为所有的 macOS 用户 提高系统的稳定性
我们确定了过去 最常见的需要进行 内核扩展的用例 现在 我们在 macOS Catalina 中为其中超过 75% 的用例提供了一个用户空间替代方案 我们鼓励你采用 DriverKit 因为 macOS 的未来版本 将不再运行这些类型的内核扩展了 接下来 我们将通过把 macOS 的系统卷变成只读的 来提高它的稳定性 它是这样工作的 现在的情况是只用一个单独的卷 其中包含了 用户数据 App 以及操作系统 现在 为了进一步隔离 macOS 的变化 Mac 将会被分为 两个逻辑卷 一个用于只读的 操作系统文件 另一个用于用户数据和 App 就是这样 这将进一步保护 系统不受变化的影响 增加稳定性 并在未来为我们提供安全方面的好处 现在 在座的一些开发者 可能已经在内心底为自己的 App 或者是安装程序做了一个预设 想要检查下自己的 App 是不是可以 在 macOS Catalina 无缝衔接的直接运行
所以 最后呢 我们增强了 App 及其数据保护 我们在过去几年里 添加了一些额外的 数据保护类别 以便用户可以掌控 哪些 App 可以接入他们的重要文件 比如个人照片 或是敏感传感器 像是 Mac 上的 摄像头或是麦克风 在 macOS Catalina 这一版本里 我们继续了这项工作 以确保 App 在捕获 输入事件前获得了用户的许可 就比如像按键或者是屏幕录制这样的事件
我们还将保护好用户 在 Mac 上的数据 所以 App 必须先获得许可 才能访问用户 存放在桌面 下载 文件 iCloud 驱动器 以及外部驱动器等位置的文件 是的 我们真的十分激动 可以把这一系列的增强 带到 macOS Catalina 之上 今年 另一个有很大变化的平台 就是 watchOS 了 下面我想邀请 Lori 上台来为大家介绍更多内容 Lori 谢谢 Sebastien
今天早上 我们介绍了一些 watchOS 6 当中的一些很酷的新特性 包括全新的健康类的 App 包括像是 听力健康 经期跟踪 健身记录趋势 以及有声读物等等 但对于 watchOS 6 来说 真正的大事是 它现在就可以宣布从手机中 完全独立出来 打造完全专注于手表的体验 多亏了蜂窝网络的连接性能 用户们现在越来越多的 放下手机 享受着只需携带 Apple Watch 就可以随时保持着通讯连接的自由感 从外出溜达到跑步训练 从听音乐 到和朋友聊天 我们希望所有的用户都能 毫无限制的享受 Apple Watch 带来的绝佳体验 独立的手表专用 App 使这一切成为可能
我们已经 很认真地观察了 开发 Apple Watch App 所面临的挑战 我们希望不仅仅为开发者带来新的 API 来支持独立的体验 我们还希望能够 彻底的改变 Apple Watch 开发者的体验
如果我告诉你 现在你可以 开发一款专门只为手表而做的 App 你会怎么考虑呢
如果你有一个很棒的点子 它是一个仅能在手表上运行的独特体验的话 Xcode 现在让这件事变得轻松可得 就是让开发者可以开发仅用于手表的 App 所以现在你可以直接实现你的想法 而无需先建立一个 iOS App
不过 即便你已经有了一个 iOS App 你仍可以 让你的 App 脱离原有的束缚 建立成一个完全独立的 App 这一切都要归功于 我们在 watchOS 6 上做出的几项关键变化 它们支持了手表上的独立 App 使得 Apple Watch 可以作为一个独立的目标平台 现在 你可以选择 直接向手表发送推送 这样你就能直接 同时一起更新你的用户和你的 App 的数据 并且无需依赖手机来进行调解
我们还支持了 CloudKit 订阅 以及复杂性推送 来帮助你保证你的 App 处于最新状态
在没有 iPhone App 的前提下 而让用户在 iPhone 上进行登录操作 是一个不可取的做法 所以在 watchOS 6 当中 我们给你提供了文本区域 这样一来 你就可以直接在 Apple Watch 上提供创建账户和登录的选项了
如果你想让创建账户这件事 变得更加容易的话 你甚至可以直接在你的 App里 添加一个用 Sign in with Apple 的按钮 让你的用户直接用他现有的 Apple ID 来创建一个新的账号 不需要输入任何的文本或是密码
在 watchOS 6 里 我们还通过向其中引入流式音乐传输 解决了一个常见的手表上单独的用例
在 watchOS 5 当中 我们引入了后台音乐重放的功能
现在在 watchOS 6 当中 我们给 Apple Watch 引入了 3 种不同的直接播放流式音频方式 分别是 Network.framework NSURLSessionStreamTask 以及 AVFoundation
我们还认识到 除了音频播放 锻炼和导航之外 还有一些用例需要让 App 保持运行顺序才能完成任务 就比如说冥想 在 watchOS 6 里 我们引入了一个全新的 Extended Runtime API 以此来让更多的 App 可以 在用户放下手腕之后继续运行
这可以使用户在 自我护理 专注力 物理治疗 智能提醒 以及健康检测方面获得全新的体验 这需要大量的 API 和功能上的支持 如果开发者能有更多的 选项来创建引人注目的 用户界面就更好了 对吧
我们知道开发者们 多年来一直要求 Apple Watch 提供 更高级的 UI 框架 现在在 watchOS 6 里 利用 SwiftUI 我们有了这样的一款框架
同样的 可以用来定义 好看的用户界面的 声明性语言 也是适用于 watchOS 的 也扩展了 watchOS 平台的可能性
从列表上的滑动删除 重新排序 再到 走马灯式动效 以及直接访问 数字表冠等等功能 现在比以往任何时候 都更容易打造一种引人注目的手表体验
下面就让我为大家展示一下 如何用 SwiftUI 来 实现一些独立的 App 功能吧 00:47:06.196 --> 00:47:07.826 A:middle 好了 现在我的模拟器里
运行着一款旅行类的 App 我已经用 SwiftUI 更新过它了 所以它看起来很不错 但我仍有一些工作需要做 因为这上面的旧版的登录按钮 现在还是会要求用户 在 iPhone 上登录 我的用户告诉我 这不是他们想要的 他们希望所有的事情能够全在他们的手腕上进行 所以我就推出这个模拟器 之后进到我的项目文件里 现在我要移动到我的 Travel Watch Extension Target 这个目录下 并且通过勾选 Supports Running Without iOS App Installation 这个框 来声明这款 App 是独立于手机的
接下来我要进到我已经写好的 登录部分的视图里 我会继续调整我的预览
太好了 你可以看到 我有一个登录按钮 并配上了两个预览 上面这个是为我所用的英语 来设计的 而下面这个是为了 尝试着将我的 App 本地化到 阿拉伯语 因为阿拉伯语是从右往左书写的 需要单独设计一下
所以我要做的第一件事就是 给用户名按钮添加一个用于输入区域 然后我要把这个绑定到 啊
我的用户名状态上 这样的话输入区域会随着值的更新而更新 注意这里我把占位符的 文本设置成了 Username 这样一来 用户就知道 这个区域是做什么的了 我还把内容类型设置成了 Username 类型 这样用户名和密码自动填充功能 就可以在使用 continuity keyboard 的时候 顺利工作了 接下来 我要添加一个 密码区域 为此在这里我要使用一个 SecureField 这样人们就无法窃取我的密码了 重复一下之前的操作 帮这个区域的值绑定到我的密码状态上
我还设了一个 Password 的占位符 之后我把内容类型设置成 Password 来方便进行自动填充 这么一看 不论是英语还是阿拉伯语 它显示起来都很不错 并且对于阿拉伯语来说 它这个位置的字是从我的本地化字符串文件内 取出来的值 这里它并不是用占位符的内容的方式设上去的
好了 完成上面的操作后 接下来我先添加一个 Sign in with Apple 的按钮 因为我觉得 用户会希望设用这样的方式来登录
现在我把它放在顶部 然后添加一个分隔符 这样用户就可以选择 用他们的 Apple ID 来创建账户 或者为我的 App 创建 另外的用户名和密码 看起来很不错
最后一步是 到我的 HostingController 上 将我的 PresentationButton 的目标 更改为我刚创建的 Sign in 视图上 而不是在 iPhone 视图里的 Sign in 部分 好的 一切就都可以运行了 现在 我打开实时预览 我的所有的按钮就都是可以交互的了 然后当我点击注册按钮 我得到了我刚设计的表单 使用 Apple ID 注册 或者是 使用用户名和密码来注册 它看起来非常不错 这就是用 SwiftUI 在 Apple Watch 上 创建一个注册表单的方式 所以 这样一来开发者就有了工具 来建立一个伟大且独立的 Apple Watch 体验了 那么你打算以什么样的方式 把你的 Apple Watch App 呈现给用户 并且可以容易被用户所接受呢
App Store 和 Apple Watch 将在 App Store 的顶层 通过精选 和编辑推荐的方式 来推荐优秀的独立 App 我们在这里强调是 独立的 App 因为这样用户就可以直接 下载并开始使用 你的优秀的 App 无论他们是否携带了手机
当你深入到单个的产品页面时 你会发现它并不是一个缩减了的体验 用户将看到功能齐全的 App 描述 屏幕快照 评论等等
他们可以搜索带有 Voice Control 和涂鸦功能的 App
用户将能够直接把 你的 App 下载到 他们的手腕上 多亏了 App 及素材方面的细化 才使得可以提供一个小型的捆绑包 并且其中仅包含对手表有意义的 架构及素材 如果你同时拥有 iOS 和 watchOS 的 App 这也可以使你的 iOS App 变得更小 因为我们不需要再把 手表的包下载到你的手机上 也不需要来回移动这个包了
对于 Apple Watch App 来说 这确实是一个全新的时代 它将比以往任何时候都 更实用 更美观 更独立 我们认为你和你的用户 都会喜欢这个改进的
现在既然说起来 手表已经从 iOS 平台当中独立出来了 我想把 Cindy 请上台 来说说 iOS 平台的变化
谢谢 Lori iOS 13 是一个很大的版本
在今早的发布会上 相信大家也已经看到了 我们更新了大量的功能并作出了很大的增强 比如说重新设计的 share sheet 新 Quick Type 键盘和全新 CarPlay 体验
除此之外 我们花了很长时间 来研究我们的 UI 并给了 iOS 13 一个全新的外观
其中包括 深色模式 卡片视效 内容上的操作以及符号
首先让我么深入到 全新的深色模式当中吧
深色模式将亮度维持在一个较低的水平 并且让浏览器变得不那么碍事 这样你就可以专注于内容了 整个系统经过了 深思熟虑的更新和完善 并且视觉效果非常的棒 你的用户肯定会需要这个功能的 并且为了帮助开发者 把这项改进带到 App 当中 我们开发了一些专门针对 深色模式的 API
首先是基于语义来赋予颜色
针对背景 填充区域和 文本都有了新的颜色 在深色模式下 它们有多个变体 给你的 App 赋予了一个视觉层次结构 所以这究竟意味着什么呢 当你的 App 是全屏的时候 它的背景是纯黑色的 为了确保足够的对比度 上面的 UI 采用了一个更亮的调色 在 iPad 上进行多任务处理的时候 具有侧边栏的 App 和两个并排 App 也会呈现出 较浅的图层颜色
这个设计有很多的细微之处 但是在整个过程中 你会自动地获得这种语义颜色效果
但你需要凸显某项内容时 会有一个明亮的系统调色板 其中的颜色在增强对比度的模式下 被赋予了不同的效果 并且在深色模式中也 有一个良好的特定的效果
还有一组全新的 材质和动态内容过滤器 并具有不同层次的透明度 这样一来 你就可以创建出比以往都要好的 UI 就和语义颜色一样 这些材质也同时 支持普通的亮模式和深色模式 他们会根据 UIKit 特征集的变化 来自动的更新
采用语义颜色和自适应材料 将帮助你提供一个 统一的外观 自动适应你的环境
iOS 13 新外观的另一个组成部分 是卡片视效
从最原始的 SDK 开始 在 iPhone 上的默认表示效果 就是全屏覆盖式的 我们现在把这种默认的效果 改成了更流畅的卡片表示
卡片视效提供了一个视觉上的堆叠效果 你一眼就可以看出 目前你正运行的东西 并且更好的一点是 你可以用手势来控制 只需向下一刷 就可以关掉当前的卡片了
是啊 刷一下就关了 我们还更新轻瞄和凸显这两个功能的的用户体验 在整个系统中 内容上的操作 变得更快 更容易 它们由一个全新的 API 来支持 这个 API 适用于所有的设备 所以它们不止在 iPhone 上有优于以往的效果 在 iPad 上也是一样的优秀
并且 当你把你的 iPad App 移植到 macOS 上 它们看起来也会很棒
当我们研究这个系统 做所有这些 深思熟虑的改进时 我们开始思考符号
大多数 App 都使用符号 它们是传递信息的一种非常有用的方式 并且符号会经常和文本一起使用 但在 iOS 12 中 文本有一些很棒的属性 我们的符号却并没有什么改进
因此 正如你在这里看到的 随着动态类型的增大 文本可以很好地伸缩 但是符号却保持不变 理想情况下 我们希望符号随文本一起缩放
所以我们开发了 SF Symbols
SF Symbols 具有 字体的所具备的 所有的表现力和行为 但不过它们被打包成了 UI 图像 这样它们在你的 App 里用起来就更容易了 iOS 13 包含了一个 极为庞大的目录 超过 1500 个 SF Symbols 供你使用 并且它们可以很容易地 在 Xcode 中搜索到 你还可以在 Mac 上 使用独立的 SF Symbols App
这就是符号 所以现在你可以 看到这些符号和文字一起缩放 以便在更大的尺寸下 获得更好的可读性和一致性 而且因为现在符号的表现 就和字体一样 所以这些字体上可用的变化对符号也一样适用
所有的这些都只是 iOS 13 中可用功能的一个皮毛 现在有全新的 share sheet API 可以让 App 获得收件人提供的建议 全新的 compositional layout API 使集合视图比以往更容易被使用 还有屏幕快照方面的增强 可以为长的内容提供完整的页面截取 还有很多很多
除了上面提到的这些 今年我们真的很想进一步推进 iOS 的发展
所以我们给了 iPad 它自己的 操作系统并配有包括 对多任务处理的主要增强 一个新的 PencilKit 框架 和一整套提高工作效率的手势
让我们先来说说多任务处理吧
在 iPadOS 中 你的 App 可以在同一时间 在不同位置 被同时打开 甚至可以以侧拉堆叠的方式呈现 并且在不同的位置下可以显示不同的内容
为了实现这件事 我们引入了一个新的 UI window scene API
每个窗口场景 都代表你的 App UI 的一个实例
在 iPadOS 诞生之前 你的 App Delegate 将同时负责 它的进程和 UI 的生命周期
有了 window scene 之后 我们将 UI 部分 拆分为一个新的 Scene Delegate 对象 这样它就可以独立管理了 因为它们是完全独立的了 你的 App 现在就可以 同时管理多个了 你的用户现在甚至看可以靠拖拽 把某个单独的项 从你的 App 中拉出来 比如拉出来一个单独的窗口或一条信息 并在一个全新的 window scene 里打开它
有了这个新功能 用户可以在任何时候 在任何场景中继续他们正在做的任何事情 这一点非常重要 为了简单起见 我们建立了一个基于 NSUserActivity 的新的状态恢复系统
你可能已经很熟悉 这个通用的 API 了 它被用于 接力 搜索 索引 和 Siri 现在 还将用于 window scene 的状态恢复
其中 很重要的一件事 就是 啊 你们可以鼓掌 没关系的 真正让 iPad 变得与众不同的一点 就是它可以配备 Apple Pencil
我们引入 PencilKit 就是为让你轻松地给你的 App 添加平滑的低延迟绘图 这与 Apple 的备忘录 Markup 以及屏幕快照 所使用的引擎是相同的 所以你可以在你的 App 中 获得所有这些相同的功能和工具 你甚至可以单独 使用画布和调色板功能 只需要选择哪些部分 适合你的用例就可以了 最后让我们谈一谈 提高效率的方法
我们把文本选择变得更加容易了 现在你可以直接在文本上 用手指一拖来选择它 文本视图和 web 视图里 已经自动地更新了 这种新的选择方式
现在有了新的三指手势 来进行撤销和重做
三指往左滑就是撤销 往右滑就是重做 这些手势使用的都是 现有的 NSUndoManager 所以你什么也不需要做就能直接采用
如果你希望在文本视图 或者 web 视图之外 能够轻松地选择文本 或者是你的 App 已经添加了 三指手势操作的话 你可以使用 UITexInteraction API 来修复
对于滚动视图来说 现在可以拖动滚动指示器 直接跳转到滚动视图中的某个位置
要启用这种操作的话 只需打开显示滚动指示器就可以了 对于这一点来说 非常重要的是我们可能必须同时加载 一个滚动框架下的所有元素 才能把滚动的性能 给提升上去 我们认为我们的用户 会喜欢 iPadOS 提供给他们的强大的新功能 我们迫不及待地想看看 你会如何使用它 所以我想让 Sebastien 再重新回到舞台上来 谢谢 Cindy 现在 正如你所看到的 我们的每个平台都有 令人难以置信的新功能 这些功能可以改进每个平台提供的体验 并赋予它们强大的新能力 并且在我们的所有平台上 我们建立了一系列的技术 来给你的 App 提供一个 一个良好的开端 这样你就可以直接在 你的 App 上使用最新的技术了 今天下午 我们想着重介绍 其中的几项技术 这几项技术覆盖了很多方面 既包括了我们是如何把我们的平台 以及 App 开放给用户的 还包括了我们如何用 AR 把虚拟世界和现实世界连接在一起 我们先从辅助功能开始讲起把 为此 我想邀请 Eric Seymour 到台上来 Eric 谢谢 Sebastien 我们都知道科技 在人们的生活里扮演着重要的角色 对于残障人士人来说 更是十分的重要 技术在促进他们独立生存 给予他们就业机会 以及赋予平等的权利方面 发挥着不可或缺的作用 Apple 一直遵循着一些关键的原则 来保障辅助功能的实现 首要的就是设备内置的辅助功能 我们的产品应该能让用户 包括健全人和残障人士 都能够开箱即用
辅助功能应该是全面的 应当让用户可以访问 整个平台 以及操作系统的每个地方 以及 App 的每一个角落 也许更重要的是 我们想让用户能够感到惊喜和快乐 不论他们是否健全 所以这不仅仅是 修复辅助功能上的 Bug 这其实要做的是 使用辅助功能的特性 来努力创造一种好的用户体验 这和你们做设计的时候一样 是需要灵感来支撑的 当我们在考虑辅助功能的问题的时候 我们实际上是在探讨 感知能力方面的广泛且连续的整体 包括 听力 视觉 触觉 以及学习能力 在这每个不同的领域中 我们关注的是它们之间的差异 举例来说 对于视觉方面的缺失 我们已经提供了旁白功能 我们为无法看到屏幕的视障人士提供了屏幕阅读器 但是与此同时我们 还有十几个与视觉障碍相关的功能 像是缩放 以及更大字体等等的功能 当我们采用上面说的方法 并把它应用到我们刚说的 感知能力方面的广泛且连续的整体之上时 我们所触及的是会相当多的辅助功能的特性 并且这一点上应着重强调的是 辅助功能是为所有人服务的
也许你们中的大多数人 现在正在至少使用着一个辅助功能 如果现在还没用过 很有可能你最终会用上它的 今年我们引入了 一些新的辅助功能的特性 和一些增强后的功能 今天我想为大家介绍其中的两个 首先是可发现性 本着人人都可以发现的原则 我们希望辅助功能 可以很容易地被人们发现 因此 我们把辅助功能 添加到了 iOS 的 Quick Start 当中 使得开箱即用的体验里 多了辅助功能所带来的便利 并且我们把辅助功能 移动到了设置的顶级目录当中 并且我们把里面的功能进行了重组 使它们可以更容易被发现 我们认为要帮助人们 发现并使用这些强大的功能 其实还有很长的路要走 现在 我们先来看看 Voice Control 吧 在今早的演讲中我们看到了对它的介绍 Voice Control 是 来自 macOS iOS 以及 iPadOS 的 完整的语音体验 我们认为它对 残障人士来说是非常有帮助的 Voice Control 提供着 全面的平台访问 你可以说出名字来打开某项内容 你也可以说出序号来引出某项内容 你甚至可以利用网格 来语音控制屏幕上的某个区域 Voice Control 有着很好的文本编辑功能 我不仅可以用语音来输入文本 我还能用语音来做出选择和更正 只需要用我的声音就能实现这些 它是智能的 所以即使是我在口述文本的时候 它也能有效的听到指令 而不需要让我去区分它们 我只需要和它讲话就可以了 并且利用深度相机 它就我看向别处的时候 他就会忽略掉我的语音
Voice Control 还有很好的 语音手势功能 所以我可以做简单的动作像是轻点或重按 但我也可以预先录制更复杂的手势 比如说我可能会想要在 一个 App 或者游戏中使用这个 旋转的手势
并且 Voice Control 所用的语音识别是完全在设备本地运行的
所以现在 想给大家展示一下 Voice Control 的实际应用 在这个演示中 我要和我的 iPhone 来进行对话
打开信息 嗨 Chris 让我们今晚一起吃晚饭吧 我想吃披萨 Pizza 表情符号
把今晚改成这个周末
点击发送
撤销
点击发送
撤销
点击发送
打开地图 点击搜索地名或地址 San Pedro Square
显示序号
第 5 个 展示网格 第 15 格 在第 1 个位置放大 重复 4 次
从第 27 个位置往上拉 隐藏网格 点击分享 点击 Chris Adams 这里有很多选择 之后见 Peace 表情符号
啊 看那儿 撤销
Peace 表情符号 点击发送
撤销
点击发送
回到主屏幕 你去睡吧
好了 这就是 Voice Control
现在 现在我们还可以用 Voice Control 来帮助开发者 来测试 App 的辅助功能 我们用你们之前看到的 那个 Travel App 来试验下 醒一醒 打开 Travel
点击 San Francisco 点击 San Francisco 显示名字
好了 这就是问题的所在 当我想要去点击 San Francisco 这个元素的时 但是它没有一个 提供给辅助功能的标签 这是一个很常见的问题 这意味着我无法通过 Voice Control 来和这个标签对话 更糟糕的是 如果我看不到屏幕 并且正利用旁白为我读屏的话 我就完全没有希望了 只能停下脚步了 我将无法使用这个 App 了 幸运的是 这些问题都很容易去解决 下面让我们来聊聊 如何让你的 App 可以更容易地配上辅助功能
好消息是大部分的 辅助功能都是可以工作的 但其中的那些 最具变革性的功能 比如 Voice Control Switch Control 和旁白功能 它们需要你提供支持 这些是你能够做到的 首先要做的就是我们刚做的 你一定要敢于尝试 在你的 App 上试一试辅助功能 你也许会对已经奏效的这些功能 感到十分的惊讶 但是更重要的是 你将会获得一些见解 了解到你的用户是如何 体验你的 App 的 你很有可能 想要尝试着去做一些改变 所以 下一步就是利用工具 Xcode 为开发人员 提供了强大的内置的辅助功能上的支持 你可以在 Xcode 的 inspector 当中编辑辅助功能的相关属性 并且利用新的 Environment Overrides 你在你 App 的 开发生命周期中 可以方便地预览视觉方面的 辅助功能的运行效果 这真的非常棒 最后要做的就是实现 Accessibility API 这是确保用户体验辅助功能的 最佳方式 也是最基本的方式 做好这些 就像是给你的 App 打开了一扇 欢迎各类人群的大门 前面说的这些 就是如何利用旁白 Switch Control 以及对话的功能 在你的 App 上 来提供一个更舒适的体验 Accessibility API 可以运行在 全部的平台上 并且它们很容易被实现 他们真的非常强大 因此 即使是在最复杂的 App 和用户体验当中也可以使用它 当然 SwiftUI 中也已经内置了 对辅助功能的良好支持 这就是我们在辅助功能方面的更新 Apple 另一件十分关心的事 就是隐私 下面我把这件事 交给 Katie 来为做进一步讲述 非常感谢 谢谢 Eric 隐私是一个永原不会消失的话题 并且这也是每个人 都需要去注意的事情 它是你从一开始 就必须设计的东西 它决定了你的产品如何工作
在设计新的功能时 可以采取以下几个步骤 来保护隐私
在用户的设备上做处理 只要你能将用户的数据存在设备上 那就该让它存在设备上 这会让你收集 尽可能少的数据 如果你没有数据 它们就不会被滥用或窃取 事先询问用户 一定要询问你的用户来获得许可 并且要告诉他们你将如何使用数据 如果你需要收集数据 要使用随机的标识符 并且把数据的来源信息 从账户缩小到设备 如果可能的话缩小到会话 并且要加密 来保证用户数据的安全
在设计过程中 应用这些原则 将帮助你构建出色的特性和良好的隐私保护 我想从两个方面做介绍 来告诉你们 我们如何帮助你们 更容易地采取上述的这些步骤 第一方面 定位
你去了什么地方可以揭示你生活的很多方面 你住在哪儿 你在哪儿工作 你会去看哪个医生 你去健身房的频率 或者是酒吧的频率
因此 一些用户不愿意 和你还有你的 App 共享位置 因此 他们可能会错过 你的一些关键功能 所以在今年 我们添加了 一个新的选项 单次允许
这将为该会话 提供位置访问 并将在下次再次询问用户 但是现在让我们假设一下 你的 App 被设置成了 总是有权限访问位置信息 但它的运行机制现在变了
首先需要用户选择 在 App 运行中允许访问地址
之后开发者就可以当 App 在后台运行的时候 请求到地址信息
之后用户将看到一个警告 来让他们知道 你正在后台请求着他们的地址 如果他们选择了始终允许地址被访问 你就可以在用户的移动过程中 从后台获得到地址信息 最后 我们让用户 更清楚地了解 他们的位置是如何被访问的
对于所有具有 后台位置权限的 App 我们会时不时地提醒你的用户 某些 App 正在访问他的位置 通过对权限的这些更改 用户对于把位置 共享给开发者这件事 将会觉得更加的舒适和安心
接下来 我们来聊聊登录这件事
我们都见过或者 实现过这样的按钮 这些按钮的确很方便 但是这其实是以牺牲 用户的隐私为代价的
它们还会把一些 你不想披露给外界的公司的信息 给提供出去
所以我们想提供给大家一个更好的选择 那就是 Sign in with Apple 它提供了快速 简单的登录方式 并且不会进行任何的追踪 这不仅关系到我们用户的隐私 也关系到你的公司的隐私
了解用户怎么使用你们的 App 不是我们该做的事情 所以 Apple 根本不会进行追踪 只需要一个简单的 API 就可以添加 Sign in with Apple 的按钮
用户可以点击一下 再使用下面容 ID 就能创建账号并登录 为什么这对你们所有人都有好处呢 第一点是更多的信任和更少的摩擦 将为你带来更多的用户
Sign in with Apple 可以缩短用户考虑你的 App 和真正接受你的 App 这两者之间的距离
第二点是核实电子邮箱的地址
Apple 已经为你完成了 验证电子邮件地址的工作
我们还通过提供 私人电子邮件中继服务 消除了用户提供 虚构电子邮件地址的动机 因此 即使用户在 设置账户时选择 隐藏他们的电子邮件地址 你的电子邮件也会送达他们的验证账户 就是他们用来完成验证的电子邮箱的收件箱 另外还有安全方面的问题 有了 Sign in with Apple 你不需要处理存储密码或密码重置问题 或密码重置问题 并且 每一个账户 都会受到两步验证的保护
这真的可以提高你的安全性
们还在反欺诈方面 整合了一些有趣的创新 我们都知道 开发者需要与 一些真正的用户在一起 有时你会得到一些不那么真实的用户
没有人想要机器人用户或者是批量注册的账户 我们努力把它们 从我们的系统中过滤出去 我们也想帮各位开发者做同样的事情 所以 我们构建了一个 我们称之为真实用户指示器的机制 它可以告诉你 一个新的账户是否是真实的用户 或者你也可以做一些额外的验证
所以它是如何运作的呢
首先 整个系统 从头开始构建 以此来维护用户的隐私 它使用了在设备本地运行的智能方法 来确定原始设备的行为 是否是正常的 设备上生成的值 是不会给 Apple 共享任何细节的
这个过程中将结合选择账户信息 之后归并成一个单一的值 之后在账户建立的时候 分享到你的 App 上 再之后 你可以根据你接收到的值 你就可以得到一个信息让你确信 你的用户是一个真实用户 或者根据得到信息 让你觉得你需要再重新判断
所有这些都提供了 强大的跨平台支持 它可以在 iOS iPadOS macOS watchOS tvOS 甚至是 在 web 当中使用
这样一来 它也可以适用于 Android 和 Windows 设备
好了 这是一个极其高速和简单的方法 可以帮你来吸引新用户 两步验证以及内置的反欺诈 你可以在任何地方实现它 而且最重要的是 它尊重每个人的隐私
所以这是一个你和你的用户 都可以信任的解决方案
已经有许多的 开发人员和我们合作 我们很高兴看到更多的人采用我们的方案 这就是 Sign in with Apple
就像我在前面提到的 一个很好的保护用户隐私的办法 就是仅在设备上使用用户的数据 我们创造了一些很伟大的技术 来实现这一点 为了给大家介绍更多关于 机器学习方面的内容 下面有请 Bill 来讲解
谢谢 Katie
机器学习是 App 体验中的一项 关键技术 Apple 使用基于设备的 机器学习来增强各项功能 包括神奇的相机功能 照片功能以及 ARKit 等等 我们之所以能做到这一点 是源自于我们尖端的硅芯片
通过强大的 CPU GPU 以及 专用的 ML 处理器 像是神经引擎 我们可以提供令人难以置信的实时体验
我们对神经引擎进行了优化 以便加速对卷积神经网络的 多精度支持 并且加速 智能计算系统
这意味着什么呢 这意味着它绝对是运算方面的猛兽 事实上 神经引擎 可以进行每秒 5 万亿次的运算 更重要的是 我们在此基础上构建了机器学习的 API 这样 你的 App 就可以充分利用 这些性能了
我们有了一些很棒的更新 以我们开箱即用的 API 为例 我们在上面更新了像是视觉 自然语言 以及语音等多个方面
现在 这些 API 已经提供了丰富的功能 像是人脸检测 目标跟踪 以及已命名实体识别 今年 我们增加了更多功能 让我们来看一下其中的某些功能吧 首先是图像显著性 它为开发者提供了一个 图像的热图 突出显示重要的对象 以及用户可能集中他们的注意力的地方
我们现在在照片中使用这项技术 来进行智能图片裁剪 并作为内容管理的一部分 我们还发布了文本识别功能 你可以从海报 标识 和文件的图片中搜索文本 其中还利用了我们在 备注当中提供的扫描文稿功能 在自然语言方面 你可以利用 Word embeddings 来帮助你识别具有 相似含义的单词和句子 我们如今在照片搜索中 使用了这项技术 比如说你搜了一个不确定词汇 音乐家 我们可以把其他的相似概念 比如艺人或歌手也搜出来
今年 我们的 Speech API 已经可以在 iPhone iPad 和 Mac 上运行了 并支持 10 种语言 并且利用像是语音显著性功能 就可以理解 语音 音高 以及语言中的抑扬顿挫了
现在 对于那些 想深入使用机器学习的人 你可以使用 Core ML 这是我们设计的在设备上 运行机器学习模型的技术 它具有超高的性能和私密性
现在 Core ML 为许多 机器学习模型提供了强大的支持 它可以支持神经网络 Boosted trees 等模型 但众所周知 机器学习领域正在不断发展 所以 今年我们增加了 比以往更多的神经层类型 以此来支持最先进的 神经网络 事实上 Core ML 现在支持 超过 100 种模型的神经层的类型
这使你能够 在 Apple 设备上运行 一些最先进的机器学习模型
像 ELMO 或 WaveNet 这样的模型 或者像 BERT 这样 最近才发布的模型 为你的 App 实现突破性的 自然语言处理
现在 在 App 中运行这样的模型 只是问题的一部分 有时 你可能希望 基于用户数据来更新设备上 的 App 里的模型
我们现在就在为面容 ID 这样的功能 来做这样的事情 用户的外观可能会随着时间的推移而变化 他们会换发型 戴帽子 或者像是 Siri 表盘 这样的功能 它的推荐集 会不断地改变 来为给每个用户提供 个性化的体验 为了实现这些体验 我们使用了设备上的个性化信息 今年 我们把这一功能 也引入到了 Core ML 当中
这意味着你可以 使用来自单个用户的数据 更新 App 中的 Core ML 模型
这创造 这为用户创造了 一个更新的个性化模型 通过模型的个性化 你的 App 现在可以在 不损害用户隐私的情况下 在后台更新模型
Core ML 为机器学习模型 提供了最先进的平台 用 Create ML 构建 Core ML 模型 从未像现在这样容易 我们的框架旨在帮助所有开发者 只用几行代码就可以构建模型 今年 我们正在 进一步 开发 Create ML 它现在是一个 macOS 的 App 了 可以让你无需敲一行代码 就能从你的 Mac 上构建模型
你可以从许多不同的模型模板中 选择适合你的数据的模型 你可以使用不同的数据集 构建多个模型 并为每个模型定义参数 你可以在模型训练当中得到实时反馈 Create ML 支持图像分类 或文本分析等任务 的迁移学习 这将加快模型的训练 因为你只需要非常小的数据集 而且可以利用 Apple 优化过的经过大量预训练的模型
你可以对模型进行实验和预览 例如 你可以通过在 Mac 上 串流地使用 iPhone 的摄像头 来得到图像的预测结果 或者你可以使用 Mac 上的麦克风 来测试你的声音的分类模型
这是一大堆新功能 我们非常兴奋地想要看看 你们会用这些了不起的新的机器学习的能力 去做些什么 事实上 我们邀请了 一些开发人员来尝试所有的新东西 我们已经看到了一些 令人惊喜的结果 其中有一个结果特别不错 我们决定要和大家来分享 欢迎来自 Lumen Digital 的 Ben Harroway 给大家预览 他的 NoisyBook 这款新 App 谢谢 Bill 大家好 我是来自 Lumen Digital 的 Ben 我正在开发一个全新的 App NoisyBook
让我先给你们讲个故事 很久很久以前 在一片美丽的草地上 住着一个叫 Jack 的男孩 和他的奶牛 Daisy Daisy 一个神秘的人给了他们一些魔豆 这些魔豆长成了一根巨大的豆茎 高高地长到了云里面
好吧 我想每个人都知道这个故事 让我们尝试一些真正不一样的东西吧
突然 一只爆炸的鸡
和它的朋友金色的老虎 跳进了它们的 直升飞机里 飞进了森林里 接着 你猜怎么着 它们都过上了幸福的生活 耶 你能发出你在故事中 听到的动物的声音吗 好了 我们玩的很开心 现在 NoisyBook 想让我们 重复一些我们在故事中 听到的动物的声音 我想我们在这个故事中 听到了一头牛 让我们试试这个吧
哞 牛出现了 我真不敢相信我站在这里 在这么多人面前 发出动物的叫声 我真是疯了 但令人惊讶的是 这个 App 使用了 一个声音分类模型 来识别声音并且认出了这是牛的声音
你也许还注意到了 NoisyBook 既能够 处理传统的故事 还能处理我们想象的故事 这其实超级的强大 多亏了 iOS 13 和 Create ML 中的 语音 声音以及 Core ML 的新功能 这一切都完全 是在设备上发生并运行的
这一切都是实时的 它运行在一个 自然语言的模型中 我已经训练了九万多行文本 多亏了这些功能 我可以把一个我近两年来 苦苦思索地想法 在短短几天内 就把其中的一些 神奇的新功能给实现出来
我为它感到非常自豪 在今年晚些时候 在 App Store 上线以后 我真心希望你们记得去看看它 谢谢 谢谢 Ben 这真的非常酷 我想我的孩子们会喜欢的 现在 Apple 最大的机器学习应用之一 是 Siri Siri 是目前为止 世界上最受欢迎的智能助手 每月有超过 5 亿个活跃设备 发出超过 150 亿次请求 这些数字令人震惊 Siri 适用于所有 Apple 设备 有了 Siri 你的用户可以用 新的方式与你的 App 互动 走在路上 佩戴着 AirPods 手里不拿着设备的站在房间的另一头 甚至是在车里 现在 成千上万的 App 通过 Siri 的快捷指令和 Siri 集成在一起
我们创建了 Siri 快捷指令 让你可以用很少的工作量 以一种用户可发现的方式 展示你的 App 中 已有的功能
你可以使用 添加至 Siri 按钮 来让你的快捷指令 可以被用户发现 并且教用户如何利用声音来使用你的 App
这很重要 因为语音功能 很难被用户发现 我们简化了设置 使用户不再需要 录入进去某个短语 你给出一个建议的短语 他们轻轻一点就把它加进去了
今年我们最大的要求 是在快捷指令中 支持参数配置 所以我们让快捷指令具备了 对话的能力 这就可以让你的用户 通过回答 Siri 中的问题 来与你的 App 互动 举例来说 如果我正在 选择做个什么菜 我可以运行 一个 Pana 的快捷指令 Pana 是我的食谱 App 之后看一下我所有的最喜欢吃的菜的列表 当我从列表中选完后 它会打开具体的食谱并且开始播放 今年 快捷指令 App 被内建进了 iOS 和 iPadOS 中 这意味着每个用户 都有机会去尝试它 这款 App 内现在也汇集了 你的 App 提供的快捷指令
根据各方的需求 我们现在正在在里面加入自动化的支持 它允许用户为 在何时运行某个快捷方式 设置特定的触发器 而且有很多选择 你可以根据一天的时间 来设置触发器 当你开始戴上你的 Apple Watch 开始锻炼的时候 当你连上 CarPlay 的时候等等情况
编辑器现在支持对 App 的操作进行完整配置 包括利用参数 将信息传入或是 传出的操作 这样 你的 App 的动作 就可以与其他 App 的动作 通过多步快捷指令给组合起来
现在我们假设你需要为家人订一顿晚餐 孩子们很饿了 你需要快一点 你可以有一个使用 Caviar App 的快捷指令 可以让你选择一家餐厅 选择一顿饭 之后订好菜 再给所有的家人发短信 告诉他们吃什么几点送到
这就是把你的 App 的强大功能 和 Siri 快捷指令结合起来 来让日常任务变得非常简单
当然 当然 快捷指令可以在 iPhone iPad Apple Watch 以及 HomePod 上运行 这些就是我们对 Siri 的更新 现在 我想请 Jeff 上台来为大家讲解 增强现实技术的最新进展 谢谢
谢谢 Bill 我很高兴今天能在这里 谈论增强现实
AR 可以帮助你把 困难 高成本或不可能的事情 进行可视化呈现 自从我们引入 ARKit 之后 我们看到了相关 App 的惊人增长 有人可能认为 AR 只是为了娱乐 但我们已经看到了 它在教育 企业 贸易 等领域的巨大应用
贸易方面的应用 特别令人印象深刻 Home Depot Target 以及 Wayfair 都有成千上万的产品 可以在 AR 中预览 ARKit 将 USDZ 文件格式 和快速查看聚集在一起 成为世界上第一个大众市场的 增强现实的商务解决方案 事实上 当人们可以 在增强现实中查看 他们的产品时 Wayfair 的购买量增长了三倍多
我们非常喜欢这个 真实的商业用例 这是增强现实在商业中的 一个很好的实际业务用例
我们想通过 宣布 Apple Pay 将在今年秋季 与 AR Quick Look 直接集成 来延续这一势头 这使得用户可以更简单地 在增强现实场景下 去试戴像是眼镜这样的商品 并直接购买它 用于 iOS 和 iPadOS 的 ARKit 是世界上最大的增强现实平台 拥有数亿个 可启用的设备 我们从很多开发者那里听到 它们想要来利用 这个大好的机会 但是可能不知道从何开始 或者是你可能从未使用过 3D 觉得它可能有点难以招架 所以 我们听取了大家的意见 我们很兴奋地要宣布三项技术 来帮助你更容易地 开发增强现实 App
ARKit RealityKit 以及 Reality Composer 它们结合在一起提供了 所需的框架和工具 来帮助你快速轻松地来开发 增强现实 App 和体验 以 Reality Composer 为开端 你可以创造引人瞩目的 AR 体验 即便是你从来没用过 3D 相关的技术 它提供了一个直观的页面 你所看到的 和你所得到的 都能在 Xcode 中得到无缝的集成
为了个大家展示 Reality Composer 我想邀请我的同事 Shrudi 到台上来 谢谢你 Jeff 很高兴来到这里 我有这个很棒的旅行 App 上面显示了一些活动 是在夏威夷主岛上举办的 如果客户选择使用直升机旅行 App 将显示直升机的路径 我们如何使用 AR 来为用户提供更好的实际旅行体验 我能通过添加一个按钮 在这个已经存在的 App 上来提高 AR 体验 让我们来看看这是如何实现的 首先我使用 SwiftUI 创建一个按钮
然后将这个按钮添加到 我已经做好的视图上 接着我在 Reality Composer 打开一个空的项目文件 并集成到我的 Xcode 项目中 只需要通过在 Xcode 简单的拖放就能实现 为了把我的 AR 场景加载到 Reality Composer 项目文件 我导入 Reality Composer 然后为此 AR 创建一个新的视图 哦抱歉 是通过 SwiftUI 创建一个新的视图 这就是你需要的所有代码 用来在你已有的 App 上添加一个 AR 体验 接下来看看还有什么有趣的东西 当我在使用 Reality Composer 创建我的 AR 体验时 我打开一个空的 Reality 项目
首先加载一个定制的 USTZ 夏威夷模型
很好 接着我想标记 我的直升机之旅的开始 为此我可以使用 Reality Composer 的 built-in 内容库 它提供了数百个 专业级 3D 内容给开发者 我将使用一个简单的 sphere
我能改变 内容的外观 通过给它应用一个不同的材质
正如你所见将内容 通过 Reality Composer 放在 3D 中 是非常简单且直观的
我们来看看除此之外我们还能做什么 比如添加一个酷炫的褪色效果 当场景开始的时候显示在场景之上 我可以通过打开 Behaviors panel 且创建一个 自定义的操作 这个操作在场景开始时被触发 首先我添加一个动作去隐藏 场景中所有的内容 然后场景开始 接着添加另一个动作 使场景在经过一定的时间后出现 我们来看看它的效果如何 棒极了 在 Mac 上开发 AR 很方便 但是它也有一些挑战是要去猜测 内容的规模以及 放置在现实中的样子 这也是为什么我们创造 Reality Composer 在 macOS 以及 iPadOS 和 iOS 上去消除 开发中的猜测 所以我会把它交给 Jeff 看看我们到目前为止在 iPad 上有什么
非常感谢 Shrudi 所以这是一个 iPad 上的 Reality Composer
它同样有着很好的特点 与你在 Mac 上看到的 Reality Composer 一样 我们可以看到 Shrudi 交出并完成了它 通过使用我们的最终作品 所以我们有人用 Adobe Arrow 创建我们的最终文件或 我们的最终作品而且我们将它放到场景中 所以我将采用 Shrudi 所拥有方式的代理艺术 我将用我们的新作品替换它 让我检查一下这是否正确 神奇 这是我们最后的直升机 而且我也希望引入 与之相关的动画 这很简单 如果你记得 她创建了这种行为 所以我们要看一下这种行为 我们要做的就是添加一个额外的动作
所以我们我们找 USDZ 动画 用来引入与文件一起使用的动画
太神奇了 看起来很好 让我们预览一下 棒极了 我们隐藏了行为标签 这就是我们想要的
完美 我们再使用 AR 看看 你可以用 iPad 来做
哇哦 再试一次 太神奇了 这就是我想看到的样子 我们同样可以播放
完美 我们得到了 在直升机上游览岛屿的动画 这在我们的旅行 App 中看起来很棒
这就是 iPad 的 Reality Composer
而且你惊奇的发现 你能够获得同样出色的易用性和无缝体验 无论是在 macOS 或 iPadOS 或者 iOS 使用 Reality Composer 现在来说说 RealityKit RealityKit 是一个现代的 高性能的 3D 引擎 自上而下设计用于 增强现实渲染和模拟 而且因为它 作为一个框架能够使你 非常容易的将 2D App 延申到 3D 中
RealityKit 使用现代的 基于可见的渲染和材质 它是一个数据驱动的渲染系统和 一个多线程渲染器 它针对 Apple 的 GPU 进行了高度的优化
与此同时还有很重要的一点 我们集成了 ARKit 场景理解到 RealityKit 中 这意味着 ARKit 会更多地关注环境 它会自动的 将你与虚拟场景进行同步 我们今天早晨看到了 RealityKit 的操作 我们来仔细看看
来看看究竟发生了什么
你看到的景象 是基于图像的照明 模糊运动以及相机效果 比如景深和相机噪声之类的东西 它真实地模糊了虚拟与现实之间的界限 并且你可以自动获得 RealityKit 的这些功能
你可以访问 RealityKit 通过使用 一个新的原生 Swift API 框架 它具有很多 Swift 主要功能的有点 允许你编写简洁紧凑的代码
概念日志和集合是直接集成的 打个比方 你可以轻轻松松加载 AR 素材 并将其直接附加到锚点 协议扩展提供了 对实体属性的轻松访问 允许你再这种快速访问 诸如灯光 或阴影之类的组件 并减少运行时检查的需要
这也意味着你可以 使用强类型的方式处理实体 我们在这里 对一个实体 施加一个角度的力 这是你在这个场景中所需要的全部代码
最后但不是最重要的是 今天是我们的增强现实框架 AR 工具包 3 的新版本
我们采用了世界上最大的 AR 平台 并通过新的深入反向功能使其更加强大
自从推出 ARKit 以来 我们已经有很多开发人员 要求能够同时使用前置和后置摄像头 好 在 ARKit 3 中你将可以实现这个功能 所以你可以 没错 同时使用两个摄像头 这使你可以使用面部跟踪 直接驱动增强现实体验
正如 Craig 在今天早晨谈到的那样 正确的识别出 一个人在 AR 场景中 是一个非常困难的问题 你每次都会看到它 就在有人在虚拟物体面前走过时
为了解决这个问题 我们构建了一种先进的机器学习算法 可以确定 哪些像素是一个人 此人在场景中的深度 并使用其信息来允许我们 正确的渲染场景中的虚拟对象 随着人们的遮挡剔除 这种全新的体验像 Minecraft Earth 的演示那样 如你所见是完全有可能的 非常神奇 最后我建立了一个系统 用来使人与虚拟的内容进行交互 ARKit 3 能够实时的捕捉 一个人的动作 而且只需要用 iPad 或 iPhone 上的 RGB 摄像头就可以实现 我们再次使用机器学习算法 去追踪一个人 构建一个二维棒形图 并获取这个图形 然后从中推断出一个三维运动或将其提升到三维 二维骨架和三维骨架 对于开发人员都是可用的 三维具有超过 90 个铰接接头 并提供与 FaceKit 相同的易用性
这些是我们的新技术 ARKit 3 RealityKit 以及 Reality Composer 都是工具和框架 它们能够使任何人都可以轻松的 构建令人惊讶的 AR 体验 今天我们想做一些有趣的事情 所以我们在会议上有了一个有趣的 App 你可能会卡看到它 SwiftStrike 我们正在制作一个桌面版本 作为今天的开发人员样例 它使用了 RealityKit ARKit 3 以及 Reality Composer 并且为你的 App 提供了一个良好的起点
太有趣了 谢谢 当然 Metal 在我们的设备上 为 AR 提供了很多功能 为了告诉你更多关于 Metal 的新内容 我想欢迎 Jeremy 到台上来 谢谢你 Jeff Metal 是 Apple 的一个现代的 高性能 GPU 编程 API 它应用于图形和计算 它非常容易使用 无论是对初学者或专家 它带来了惊人的性能提升 支持比 OpenGL 多 100 倍的绘图调用 并实现一个全新一带的 高级图形性能
这是因为 Metal 使你的 App 可以直接控制作为 Apple 核心产品的 GPU 而且这些 GPU 现在拥有 超过 14 亿个支持 Metal 支持系统 从 iPhone 到 iPad 再到全新的 Mac Pro 事实上所有 Apple 的平台 现在都是在 Metal 上运行的 从我们流畅的用户界面 到 RealityKit 中最新的三维渲染 再到我们先进的 摄像机处理流程 我们无处不在使用 Metal 你也一样 为了帮助你做到这一点 今年我们专注于这三个关键领域 我们让 Metal 使用起来更加方便 我们已经启用了全新级别的 高性能 GPU 计算 与此同时我们增强了 Metal 为最苛刻的专业 App 开发人员以及客户 首先使用 Metal 令人难以置信的 API 和 GPU 着色语言 你可以开始使用 我们强大的开发人员工具 来对 GPU 进行调试 分析以及优化 我们使这些工具变得更好 我们添加了 Metal 的全支持 在 iOS 和 Xcode 上 我们很高兴你对它感到兴奋 我们也感到很兴奋 你现在可以直接在模拟器中使用 Metal 并且自动获取主要的 性能提升 挡在使用 UIKit Maps 以及所有基于 Metal 的框架系统时 这是因为 iOS 系统模拟器 现在得到了 在你的 Mac 中内置的原生 Metal 的支持
我们还添加了一个全新的 Metal 内存调试器 现在你可以准确的识别 有多少内存被你的 App 用于 Metal 纹理 缓冲区以及 散热并且你可以 优化你的游戏和 App 以便使用每最后一个字节来得到更高级的图形
在过去的几年中 Metal 已经发展到可以支持 数十个 GPU 的高级功能 每个 GPU 都有自己的硬件 来自每个主要的 GPU 供应商 以及我们所有的平台和操作系统版本 并且作为一个开发人员 你以前必须自己管理所有这些 不同的硬件功能集所有的复杂性
然而今年我们 只用了三个 Metal GPU 系列就变得更简单了 一个 Metal 常见的 GPU 系列 可以识别绝大多数 你可以在我们所有平台使用的 Metal 功能 第二个系列 是一些高级的独特功能 可以用于 Apple 设计 GPU 和 iOS iPadOS 和 tvOS 产品等 第三个系列用于 Mac 系统上强大的 GPU 它使你的 App 更容易的 从 iOS 到 macOS 或其他方式
现在除了支持 沉浸式游戏和高级图形外 Metal 还为你的 App 提供了 利用 GPU 进行计算的能力 所以 GPU 计算是什么 GPU 最初设计 适用于处理大量的像素 需要以大规模并行方式 进行复杂的数学计算 事实证明我们可以 将计算能力应用于 各种各样的任务 它们不仅仅是传统的图形 因此 Metal 提供了所有 需要构建的模块 而这些模块是 GPU 上通用计算所需要的 一种熟悉的基于 C++ 的 GPU 编程语言 计算命令编码和 API 和运行时 全功能编译器 和调试器以及丰富的着色器和内核库 它被称之为 Metal 性能着色器
这个 MPS 库为你提供了 有价值的计算功能 所有这些功能都被预先优化了 GPU 和所有 Apple 系统 并且已经完全集成到 你的 Metal 代码中
在我们的 Apple 设计 GPU 上 Metal 还提供了高级的 计算功能比如着色 使你能够计算着色器和片段处理 组合成一个简单的高效的渲染过程
并且今年我们 还推出了 Metal 间接计算命令编码 它允许你构建 GPU 计算指令在 GPU 上面 解锁全新的 计算效率算法并释放 CPU 以此来帮助 App 中其他的活动 使用 Radeon Pro Vega II 新款 Mac Pro 是一款 GPU 计算怪兽 可以提供高达 56 万亿次浮点运算的 GPU 计算能力 这些都通过 Metal 提供给你 现在这是很多失误 我的意思使看看他们 它们几乎不能放在屏幕上 太多了 那么你能用 GPU 计算的所有这些触发器做什么呢 那么使用 Metal 你可以 将它们应用于高级计算处理 对于你的视频你可以提高照片的质量 你可以训练你的 ML 模型 并且你可以使用它们 来加速交互光线跟踪
因此我们在今年进一步改进了 对光线跟踪的 Metal 支持 现在启用动态场景 通过将边界和层次结构 从 CPU 移动到 GPU 来实现 并且添加了全新优化的 MPS 去噪滤波器 以进一步提高图像质量 现在光线跟踪使用 GPU 来计算模拟灯光和表面以及反射的 物理属性 它可能非常复杂 人们实际上可以在这个主题上获得博士学位 因此为了想你展示 如何使用 Metal 和 GPU 计算 进行光线跟踪 我们决定将一个非常简单的实例放在一起 我现在想邀请 Rav 到舞台 给你们做一个快速的演示 Rav 谢谢 Jeremy
因此我们构建了一个原型混合光线追踪引擎 以了解我们可以在强大的 新 Mac Pro 上使用 Metal 计算做些什么
现在我们建造的这个玩具城市 看起来很简单 但是我们正在使用 Metal 以 4K 分辨率每秒 处理超过 10 亿条光线 让我来带你了解一下 我们在这里所做的事情
首先我们使用 Metal 绘制命令 来渲染几何体 以及材质的信息 这些我们之后会用到 然后切换到使用 Metal 计算 以及 MPS 光线三角交叉 API 来完成所有繁重的工作 这包含计算 每一个表面点的环境光 正如你在这张图上看到的一样 而且可以模拟场景中的物体之间的光线反射 增加光线的深度 以在这些反射中产生阴影和反射 甚至是反射的反射 然后我们通过使用优化的 MPS 或者优化新 MPS 降噪器中的计算内核 来生成这种真正高质量的图像
因此传统的 CPU 渲染 需要花费超过一分钟的时间 来生成这样的帧 而使用 Metal 后我们已经可以 将时间减少到 30 毫秒以内 这比之前快了 1000 倍
所以我要感谢 Pro App 的开发人员 谢谢你们 我们也认为这很棒 因此 Pro App 的开发者们 现在可以使用 Metal 计算来构建 新的交互式工具 以可视化这些物理上精确的光影效果 比如由建筑物投下的巨大阴影 以及火灾逃生
或者如果我们在这里 平移到这个屋顶 绿色的灯光反射到这个相邻建筑物的实现方式
这看起来很棒 谢谢 另一个很好的效果 即我们可以模拟或建立的模型 是精确的反射 正如你在公共汽车的挡风玻璃上看到的那样 事实上你可以看到 阴影在那个挡风玻璃或 那些反射中移动 就在我在改变太阳的位置时侯 因此这看起来会很棒 但是在光线跟踪场景中设置的动画对象的 计算成本非常高 因为我们必须更新 与几何体关联的边界体积层次结构
幸运的是通过 Metal 计算 和 MPS API 我们可以 将所有这些工作移到 GPU 上并实现这个精彩的动画
那里有我们的火车 因此这只是一个可能的实例 即当你使用 Metal 在新 Mac Pro上 进行加速光线追踪 这太神奇了 谢谢 把时间还给你 Jeremy
谢谢你 Rav 这就是我们在短时间内所做的事情 但是高性能光线追踪 在我们最专业的第三方开发人员手中 可能会变得更加强大 这就是为什么我们非常兴奋 OTOY 宣布它们正在 使用 Metal 计算来构建 OctaneX 这是一个全新版本的 Octane 渲染器 他们的互动路径追踪引擎 针对 Metal 和 Apple 平台进行了优化
我们非常激动地与 Maxon 合作 Maxon 将其强大的 GPU 加速渲染器 Redshift 带入 Mac 并为 Metal 和新 Mac Pro 优化了全新版本 因此 借助先进的 Metal 计算 API 以及其强大的硬件 我们构建了 Metal 来支持最先进的 专业内容创建工具 我们一直与领先的 App 开发人员密切合作 他们都宣布将推出的这些 专业内容创建工具和 App 将针对 Metal 和 Apple 平台进行全面优化
例如 Serif 刚刚宣布 推出全新版本的 Mac 系统的 Affinty Photo 使用 Metal 的图形和计算 API 来增强其先进的照片处理引擎 从而实现惊人的性能提升 性能提升 10 倍以上或 甚至是更令人吃惊的 50 倍以上 就在使用带有多个 GPU 的 Metal 在新 Mac Pro 上运行的时侯
因此为了实现这些专业 App 和此类性能 我们与 GPU 硬件和软件合作伙伴团队密切合作 为 Metal 添加了全新的功能 为了支持新 Mac Pro 中心的 AMD Infinty Fabric 链接 我们添加了 Metal 对等组 API 那么这是做什么的呢 以前在多个 GPU 之间共享工作负载 需要在 PCIe 总线上移动大量数据 但是使用 Metal 对等组 API APP 可以更加有效的使用多个 GPU 直接在 Infinty Fabric 链接上共享数据 而无需通过系统内存占用那么长而昂贵的路径
最后你已经了解了如何 使用 Metal 计算和新的 Mac Pro 来处理更多的像素 但我们也希望你能够制作出 更加美丽的像素 因此我们引入了华丽的 新款 Pro Display XDR 和全新的 HDR 软件支持 在 macOS 上 你现在可以使用 AV 基础 API 解码 HDR 视频 也可以直接使用 Metal 渲染原生 HDR 内容 你可以管理 HDR 现实色调映射 或者也可以让 Windows 系统和我们的 高级显示系统软件为你做处理 使用这些相同的 API 你还可以在我们现有的许多 Mac 显示器上访问更大范围的亮度级别 这就是我们今天的 Metal 更新 这样会更加轻松的在所有平台上使用 Metal 即通过 iOS 模拟器中的 Metal 和简化的 GPU 系列 我们拥有全新的功能 和强大的硬件 可以释放全新的 GPU 计算性能 我们将 Metal 打造成 最佳的 GPU 编程 API 以推动现代专业内容创建工具和 App 非常感谢 我现在把现场还给 Sebastien 谢谢大家
谢谢你 Jeremy 你们不爱 Metal 吗 你们不喜欢 Metal 强大的能力吗 非常非常精彩 你今天下午看到的是大量的新技术 这对你们所有开发者来说都是新的 我们展示的内容 涵盖了开发者工具 Apple 平台以及核心技术 这些只是其中的一些亮点 事实上本周我们还有很多东西可以展示给你们 所以我们前面有 109 个不同的会议 事实证明 这还不足以涵盖所有 所以今年我们又增加了 27 个视频会议
当你们像更深入的了解时 你可以在一周的 229 次不同的实验中 和在 WWDC 的 1000 多名 Apple 工程师坐在一起
所以走出去 准备好让你的头脑清醒一下 这将会是伟大的一周 谢谢大家 [掌声]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。