大多数浏览器和
Developer App 均支持流媒体播放。
-
Platforms State of the Union (ASL)
Take a deeper dive into the new tools, technologies, and advances across Apple platforms that will help you create even better apps. This version includes American Sign Language (ASL) interpretation.
资源
相关视频
WWDC21
-
下载
欢迎来到 WWDC 2021 Platforms State of the Union WWDC 让我们开发者相聚在一起 来看我们的平台 近期取得的新进展 此刻 我还想回顾一下你们之前的工作成果 看我们所有人如何在你们的帮助下 顺利度过过去一年 你的 app 和创造力让人们 在特殊情况下找到了新方法 让事情顺利进行 有很多很棒的例子表明 世界因开发者而不同 我们也知道我们还能做很多事 帮你更快地将世界变得更好 所以今年 我们推出了很多工具、技术和各类 API 专门为你设计 帮你达成更多成就 我们今天会谈到我们在推动的 三大领域 首先 我们会先介绍 能帮你打造优质 app 的工具 包括 Xcode、 Xcode Cloud、 Swift 和各类 UI 框架 接着我们会介绍 Apple 技术能如何帮你打造 app 让你的 app 能够采用增强现实技术 和我们的图形处理技术 让用户以新的方式看世界 最后 我们会介绍一些新的功能 如专注模式、屏幕使用时间 API 小组件和 SharePlay 让你的 app 帮用户 更好地相互联系 优先考虑对他们最重要的事情 让我们从开发 app 开始说起 接下来 Alison、 Rhonda 和 Andrew 将为你详细介绍 如今 开发一个 app 过程相当复杂 你依靠工具 保持专注和高效 编码是开发 app 最关键的一步 但如今打造一款优质 app 需要一些专业的步骤和工具 你要在不同配置下测试代码 你的团队要评审你的代码 所做的修改要存进一个共享的代码段库 然后交给测试版的参与者 再根据测试反馈不断优化你的 app 每一步都很重要 每一步都要做对 这个过程中 你通常要在不同的 app 网页和服务之间切换 这些场景切换会让你分心 让你无法专注编码 是时候改变这种状况了 要消除干扰 将整个过程整合起来 这样你和团队才能专心创造卓越体验 因此我们打造了 Xcode Cloud 提供全新持续集成与交付服务 内置于 Xcode 采用云托管 帮你管理开发过程的每个阶段 轻松做对重要的事情 Xcode Cloud 通过全新设计打造 支持所有 Apple 平台的开发 与 Xcode 深度结合 让你保持专注 帮你节省时间 它利用 Apple 的云基础设施 可以卸载构建和测试 甚至是用于分发的代码签名 它还集成了 Apple 提供的其它服务 比如 TestFlight 和 App Store Connect 以及所有主要基于 Git 的 源代码提供程序 它甚至还有各类 REST API 帮你联结开发过程中的其他方面 它具有高级的安全性 保护着你与你的项目 这是自 Xcode 首次发布以来 我们在开发者工具上最大的投资 它所有的功能都是你熟知的 在 Xcode 13 里创建管理 Xcode Cloud 工作流 你可以停留在代码界面 让它为你处理测试套件、代码签名 和 TestFlight 分发 Xcode Cloud 完成构建后 结果就已经在 Xcode 里了 这会改变你的工作方式 也已经在改变我们的工作方式了 Apple 的许多团队已经将 Xcode Cloud 用到了他们的开发过程中 包括 Xcode 团队本身
Xcode Cloud 非常容易上手 只需四步 选中产品 确认工作流 授权访问源代码 连接 App Store Connect 让我们用 Fruta 演示一遍整个流程 它是一款 SwiftUI 示例 app Xcode Cloud 自动检测 项目的产品和平台 点击下一步 然后我会查看推荐的工作流 上面显示了 Xcode Cloud 的工作内容和时间节点 这些默认操作会构建我做的每一个修改 正合我意 现在 Xcode Cloud 会安全连接到 源代码的托管账户 我已经用我的凭据授权了 所以直接继续 最后 Xcode Cloud 发现 Fruta app 已经在 App Store 里了 于是请求我确认信息 如果你的 app 还未注册 Xcode Cloud 会帮你注册 点击完成 开启我在 Cloud 上的首次构建 完成构建后 就可以在报告导航器查看结果 就像这样 就实现了 app 的持续集成和交付 都不到一分钟 全部在 Xcode 内解决 让我们仔细看看结果的呈现方式 在报告导航器的 Cloud 标签下 每个工作流运行过的构建 会根据分支或 pull request 分组 选择一个独立构建 出现概览页面 可以看到一些信息 例如开始的时间和方式 用的 Xcode 和 macOS 的版本 所有动作的状态 你甚至可以查看源代码 或者重新构建 虽然默认工作流很方便你上手 但 Xcode Cloud 可以提供更多功能 帮你实现你的目标 比如分析 app 或者在 TestFlight 或 App Store 上发布新版本 我团队想给每个 新 pull request 做 iOS 测试 所以现在让我们来设置这个工作流吧 回到 Xcode Cloud 产品菜单 这次选择 “Manage Workflows” 点击 “+” 添加新的工作流 把这个工作流命名为 “Pull Requests” 编辑起始条件 在所有的 pull request 上运行 目标设定为主干 我想要在 Xcode 和 macOS 的公开测试版上测试 所以我会在这里设置 接下来 看看工作流动作 添加 “Test” 动作 在项目里选择 现有的 iOS 测试计划 为了更全面地测试 app Xcode Cloud 推荐使用模拟器 只需点击两下 我的工作流里就配有 一套精选的 iPhone 和 iPad 非常方便 我们团队还需要知道 我们构建是否成功 所以我还会添加 “Notify” 请求动作 并添加团队的 Slack 信道 点击 “Save” 工作流就添加到 Xcode Cloud 上的产品里了 这样我们团队对所做的 修改就更有信心了 利用工作流还可以做很多事情 包括运行自定义构建脚本 使用 Xcode Cloud 的网络回调和各类 API 集成你和你的团队所使用的其他系统 你刚刚在 Xcode 上看见的 工作流管理和构建报告 也可在网页版 App Store Connect 使用 这样你和团队其他成员 可以在任何地方使用 Xcode Cloud 现在 你已经了解了 Xcode Cloud 的基本工作原理 那么我们来看看 Xcode Cloud 如何 在开发周期的每个具体环节给你提供帮助 写出好的测试并且反复运行测试 对开发优质 app 至关重要 有了 Xcode Cloud 你的代码测试可以 更全面 更一致 更高效 你可以对 Xcode Cloud 工作流进行配置 在多个平台、设备模拟器 和操作系统版本上 并行运行多个测试计划 你甚至可以先在 Xcode Cloud 内 在操作系统测试版上运行测试 而且甚至是在你把测试版 操作系统下载到你的设备之前 因此 Xcode Cloud 会帮你做更多的测试 Xcode 13 会帮你把测试做得更好
我们的 Fruta app 有深色和浅色两种外观 横屏和竖屏两种浏览模式 还推出了两种语言的版本 我一直在做一套用户体验测试 用到了 Fruta 最受欢迎的功能 在我的测试代码里 我会用到简单的 XC test API 为了让测试更深入 我会在每个变体里自动运行每一项测试 让我们看看 Xcode Cloud 的测试覆盖率 选择最新创建的构建 以及我之前配置好的工作流测试动作 结果出来了 在熟悉的 Xcode 测试报告里 这些测试在一套推荐的 iPad 模拟器上运行 每次配置都要运行一次 iOS 15 全程抓取截屏 Xcode 13 查看结果的方式新颖便捷 通过编辑器选项栏 我将转换到图集视图 测试中的各种变体的所有截图 都呈现了出来 每项测试的图片都放在一起 缩小画面可以看到所有图片 如果发现了我非常感兴趣的图片 我可以用快速查看功能查看高分辨率图片 图集视图可以让我们轻松确认 我们的 app 在 各种条件、语言和画面布局中是否看起来完美 在我的单元测试里 有一项失败了 我相信你也能感同身受 测试有时候成功 有时候失败 我们都经历过 Xcode 13 可以帮到我们 我回到测试源 点击测试 gem 选择 “Run Test Repeatedly” 让我们看看可靠性如何 运行一百次试试 如果我以前想这么做 我要自己运行很多很多次 现在我只用坐等工具完成运行就好 如我所料 Xcode 显示这项测试非常不可靠 我的代码肯定有问题 但是在修复之前 我要用最新的 Expected Fail API 并提供可靠性方面的信息 给团队其他成员参考 为了确保一切如我所料 我会用 Test Again 功能 这个功能在产品菜单栏可以找到 Xcode 里有历史操作记录 所以操作很简单 我的测试不断发出断言 但没有运行失败 而且还有提醒告诉我晚些时候要修复 这正是我需要的 你可以看到 Xcode 13 和 Xcode Cloud 能帮助你发现并解决你 app 或测试中出现的问题 而且速度比以往更快 你可以通过测试了解你的代码 还可以通过同行的 代码评审和 pull request 来了解 为了让你专注编码 Xcode 13 将你和 团队间的讨论 直接放到代码编辑器里 我创建了一项 pull request 用的是我一直在做的分支 通过我这个功能 用户可以收藏最美味的奶昔 在左边的导航栏里 你可以看到新的源代码控制修改的标签 里面有我在本地修改的所有文件 我的 pull request 以及我做的修改 选择 pull request 后 我可以概览所有任务 以及进行中的对话 往下滑 可以看到我的描述 精彩事件、时间 以及团队给的任何代码反馈 和我自己做的新 commits 但我们用的是 Xcode Cloud 我们的 pull request 工作流 会构建和测试我做的所有 commit 顶部可以看到我所有工作流的实时状态
Rhonda 提了一些建议可以让我的代码变得更好 当我回到源代码界面 我可以在代码编辑器里看到 Rhonda 的评论 这个代码要求用户登陆 所以需要改写 这样用户得登陆后才能收藏食谱 我将回复 Rhonda 让她知道我会马上修改 也提醒她 如果她不先登陆 修改后构建可能会崩溃
除了 pull request Xcode 13 也让查看本地修改变得非常简单 我现在浏览到我正在处理的一个文件 Xcode 就会自动显示 我的修改和上一次修改的不同之处 内联排列 非常美观
我可以使用最新修订选择器 比较本地修改和 历史记录里的任何分支或者标记 最棒的是我可以在任何代码编辑器里审核代码 即使我在窗口里 在不同的文件 使用多个编辑器分栏 也能做到 现在有两个选项 内联对比和并排对比 我要选最完美的呈现方式 帮助我完成工作 改完最后一个代码 看完最后一条评论 这时查看和回复 自己团队的意见 就非常简单
提供出色的用户体验 需要做的一步就是把 app 交到团队和测试版的参与者手里 Xcode Cloud 可以让这个流程变得毫不费力 Xcode 13 能通过云端 安全获取并管理你所需的一切 完成你 app 的代码签名 也就是说 你不用担心 一直要在 Mac 上 更新证书和配置文件 Xcode Cloud 工作流里的存档动作 使用同样的系统签发 app 通过添加 post-action 到 Xcode Cloud 工作流 可以将测试版本用 TestFlight 自动发送到 Apple 的所有平台 包括 macOS 这用新的 Mac 版 TestFlight 就能做到 交付了你的最新构建之后 你会收到更多来自测试版参与者的评价 Xcode 13 做了重大升级 让你能更好地收到 诊断和反馈 如同在 App Store Connect 里 TestFlight app 里的崩溃记录 现在可以在几分钟内 发送给 Organizer Organizer 现在可以显示用户附在 崩溃报告里的反馈 这给你在分析崩溃时提供了宝贵的背景信息 让你更全面地了解 app 的使用情况 Andrew 的测试成功后 Xcode Cloud 将此版本直接提交给了 TestFlight
我手机上刚刚收到了一条通知 是关于 Fruta 的新 iOS 版本 Mac 上的 TestFlight 也 发了一条 Mac 版的通知 由于 Fruta 是一个多平台项目 我会在两个地方同时获取这个新版本 好激动 要安装这个版本了 看看这些新功能用起来怎么样 那我现在体验一下 我估计 还有一些不够完善的地方 可能我收藏这一款奶昔时 app 会崩溃 果不其然 我可以用 TestFlight 的崩溃反馈 UI 告诉 Andrew 我会解释 app 崩溃时我正在做什么操作 之后他就会进行修复 并增加测试以确保下次可以早点发现问题
我一直在 Organizer 里 看着我们这个 app 的最新版本 当我筛选到最后一天 可以看到 Rhonda 遇到了一个崩溃 就在不久前 完全符号化了 方便随时调查 新 TestFlight feedback inspector 包含了她的评论 此版本 app 的信息、版本号以及她的设备 我甚至可以联系她 进一步了解她的使用体验 更棒的是 Xcode 知道我的代码哪里发生了这次崩溃 所以只要点击一下 我就可以打开项目找到它 调试导航器有完整栈追踪 源代码编译器里提示了断言 我的 pull request 对话也展现了出来 真是激动人心 我解决问题所需要的东西 Xcode 里全都有
我们把所有你需要的东西都放在了 你每天使用的工具里 包括测试结果 同事的评论以及用户反馈 这些能让你的认识更加深刻 帮助你开发出 下一个更好版本的 app Xcode Cloud 秉承 尊重隐私和保障安全的设计理念 你的数据 包括源代码、访问令牌 签名密钥和打包 在这里都很安全 我们尽可能使用最少的数据 来提供服务 就开发者工具而言 今年意义非凡 基于 Xcode 13 和 Xcode Cloud 你打造和发布的 app 会覆盖 Apple 的各个平台 而且比以往更省时省力 Xcode Cloud 最初会以测试版 免费、限量开放 Developer Program 用户 现在就可以报名 网址是 developer.apple.com 我们之后会开放给更多团队 努力在明年开放给 所有开发者 今年秋季 我们会提供更多 价格和开放范围方面的信息 你可以在 Xcode 13 里 或者 App Store Connect 里的 Xcode Cloud 标签 查看注册状态
除了你刚看到的 这里还有大量优化提升和新功能 是针对我们开发者工具做的 你可以在今年的 session 中了解到相关内容 比如 Xcode 里对 Swift 的支持 就有极大的提升 这才刚刚开始 今年的 Swift 有很多精彩升级 下面有请 Josh、Holly 和 Matt 为你介绍
Swift 已经成为了一个至关重要的开发语言 这对 Apple 所有平台的开发者 和其他开发者来说都是如此 它利用了我们最现代化的技术 作为基础支撑着 新一代的框架 如 SwiftUI、CreateML 以及最新的 StoreKit 2 Swift 提供了现代化的类型安全语言 帮你打造最复杂的 app 还提供了强大的工具 如 Xcode Previews 和 Swift Package Manager 帮你提高开发速度 对新手也很友好 容易上手 很多精彩纷呈的内容与课程 可以在 Swift Playgrounds 里找到 新手可以通过它们学习编程 想要确保一项技术对你们是有帮助的 我们就要自己先采用它 像音乐这样广受关注的 app 这些年都是用 Swift 写的 小组件这类系统功能 也是完全用 SwiftUI 设计的 Learning Swift 和 SwiftUI 为你提供了 一套强大的开发者工具和各类 API 能让你在 Apple 所有平台构建原生 app 由于 Swift 本身是开源的 因此我们能与你们很多人合作 在近几年 开发出非常多的新的特性和功能 现在 其中一项功能 对开发任何 app 都至关重要 那就是支持并发 下面有请 Holly 为你详细介绍
不管你有没有意识到 你现在正在写并发代码 并发能让你的 app 同时执行多项任务 这样 app 在后台运行的同时 可以一直响应用户输入 比如 天气 app 在用户选择城市的同时 获取天气预报 多核处理器 也格外重要 靠它才能高效完成大量计算 比如 在一个视频类的 app 里渲染视觉特效 但如果没有语言支持 并发代码很难写对 所以我们在 Swift 里提供一流的 并发支持 我们把并发 嵌入语言的方式 与 Swift 本身的核心原则一脉相承 就是为了让大家能更轻松地 写出现代、安全和快速的代码 消除所有编程错误 首先说说我们如何使用现代化方式 将并发嵌入 Swift 里 如今 我们认为现代编码 是结构化的 可以清晰地表达你的意图 遗憾的是 如今大多数异步代码 使用的结果处理器是未结构化的 很难清晰地表达意图 为了更简单地表达异步函数 我们在 Swift 里嵌入了现代 的 async/await 模式 现在你可以用 async 关键字 标记异步函数了 当函数被调用 你用 await 关键字 来表示当调用者等待异步函数结果时 其它工作能够同时完成 为了理解 async/await 给结果处理器带来了哪些提升 我们来看一个例子 开发 Swift 编译器之余 我喜欢跳舞 要为演出做准备 舞者必须先热身 工作人员要从仓库里找出道具 搭好舞台 完成这些后 舞者就要站好 准备开场了 这是使用结果处理器做的 “prepareForShow” 任务 来看看它的异步实现是怎样的 这部分代码要做的事情很简单 但是代码写的很复杂 它用的是嵌套式的结果处理器 让执行很不自然 所以很难读懂代码 在这里用 async/await 出现的代码直线排列 这样理解起来容易多了 控制流自上而下执行 和其他函数一样 你处理错误和返回值的方式 和之前在 Swift 里用的一样 你还可以使用所有普通的控制流构造 因此 添加条件逻辑很简单 这样函数在 “rehearsal” 时截然不同 Async/await 让编写异步代码更简单 使用的工具都是你熟知的 加入并发也很简单 使用结构化并发即可 结构化并发可以组织并发任务 让它们更容易被推演 让我们给 “prepareForShow” 加入并发 现在这个函数在等 舞者热身完 之后才开始舞台搭建 但这些任务可以并行完成 有了结构化并发 可以像这样在局部变量上用 async/await 轻松创建并发子任务 现在代码用 “async let” 变量 创建子任务 与母任务同时执行 这样一来 演员热身和舞台搭建 可以和 “prepareForShow” 的其他任务同时运行 当我们需要子任务的结果时 我们使用 await 因为 “fetchStageScenery” 是同时执行的 当 “prepareForShow” 要用这个结果时 结果有可能还没出来 所以获取结果必须要异步完成 Swift 的并发模型设计得很安全 正如 Swift 可以消除可选项的空指针错误一样 编译器如今也会消除 常见的并发问题 要做到这一点 就要确保安全协调 并发任务对共享状态的获取 这个安全并发模型的核心部分 围绕 actors 构建 Actor 是行业认证的模型 可以保障并发编程的安全 它还是一个强大的同步原始类别 理论上 actor 是一个对象 通过只允许互斥访问来保护自己的状态 这完全杜绝了并发访问 和随之而来的低级数据竞争 这个概念可能听起来很熟悉 因为你可能已经给带有 dispatch queue 的类用过这个模式 而它和你用的这个模式很相似 这个模式也是从 actors 那里得到的启发 在这个模式中 使用了一个串行 dispatch queue 仔细地访问 类的实例属性 来保持进程互斥 但这种模式很容易出错 冗余代码太多 太容易忘记只要手动使用一次 dispatch queue 就会将竞争条件引入代码里 要解决这些问题 我们要重新回到 actors 这一核心概念上 并将它作为一级构造嵌入到 Swift 里 现在 只需一个简单的关键词 你就可以在 Swift 中 声明 actor 类型 它的架构和你已知的构造是一样的 也不需要再手动同步 将 actors 嵌入 Swift 语言 这样同步访问 actor 状态 可以自动实现 actor 能直接访问自己的属性 并在与另一 actor 进行外部交互时使用 async /await 保证进程互斥 actor 概念强大到可以从源头上解决 另一个常见并发问题 它能合理利用主线程 处理 UI 操作等任务 如今 每次你要调用一个 API 它必须在主线程上运行 而且需要你手动 dispatch 到 main queue 现在 我们采用 MainActor 引入一种新方法 来表示 API 一直在主线程上运行 确保 API 一直在 MainActor 上运行 就和用 MainActor 属性注释声明 一样简单 和其他 actor 一样 调用在 MainActor 上运行的函数 只需一个 await 命令 所有这些意味着你可以更轻松地 写出安全的并发代码 不用自己操心 我们将并发支持 直接嵌入到语言里 也让我们有机会优化 你并发代码的运行效果 用 async/await 命令 编译器就可以理解 你代码的并发 完成更多有效优化 包括减少引用计数、实现内联 和处理并发相关的具体问题 比如 过度复杂的上下文切换 当然 今后几年 编译器会越来越智能 你的并发代码也会运行地越来越快 SDK 里有大量的异步 API 都是你已经在 app 里用过的 我们已经优化了 SDK 让 async/await 能用于 这些异步 API 这样 你可以即刻 在现有代码里使用 async/await 命令 我们所做的不止于此 我们新增加了各类特制 API 在你用到 URL 时 做异步输入/输出时 这些 API 都能使用 async/await 命令 我们甚至增加了异步迭代支持 可以在文件内逐行迭代 Async/await 让表达异步代码更自然 结构化并发让并发代码 更易于推演 actors 能帮你在并发程序里 安全构建共享状态 Swift 并发模型集合了 这些重要功能 帮你提高工作效率 为你赋能 让你更享受开发并发 app 的过程 当然 语言只是一方面 用 Swift 构建的框架也同样重要 接下来 继续让 Josh 为大家介绍 Swift 给下一代 API 提供基础支撑 有了并发等新功能 语言和框架同时进化 这样你可以立马在 SDK 里发现其带来的好处 在 SwiftUI 这类关键技术上也是如此 两年前 我们开始在自己的平台上 重塑 UI 开发 我们从小处着手 创建了一个核心 API 让你可以在已有的 app 里 逐渐使用 SwiftUI 去年 我们增加了 API 来描述 app 的生命周期 让你可以从写第一行代码开始 完全在 SwiftUI 里开发 app 今年 SwiftUI 又要迈上新台阶 帮你在所有 Apple 平台 给用户提供卓越体验 我们很重视那些对你们的 app 很重要的 API 我们也一样需要用它们来构建我们的 app 你们的反馈可以帮助我们升级最重要的 API 同时优化开发体验 今年 我们开始在地图 app、照片 app 和快捷指令 等 app 里使用 SwiftUI 我们也已经重构了 iOS 的 app 比如 天气 app 和系统交互 如 Apple Pay 的付款单 以及全新的 watchOS app 如 查找 app 这些全是用 SwiftUI 实现的 为了给你展示做到这一切 所用到的功能的一些升级 让我们来看看我们能怎么优化 Fruta 先看列表页 这是最常见的组件 我们所有平台上都有 我们现在可以添加轻扫动作 轻松收藏奶昔 想添加下拉刷新功能 就再写一行代码 用 Swift 可以轻松把修饰器仅用于单个平台 比如这里的 iOS 平台 再添加一行代码就可添加搜索栏 现在 做到这一步已经可以了 但是让我们再添加一些搜索结果推荐 这样输入时会自动显示 我们在 Xcode 里来测试一下 现在可以轻扫 下拉刷新 支持全面搜索 包括搜索结果推荐 实现这些只需要几行代码 接下来 让我们来优化 Fruta 的辅助功能 首先 用一个新的修饰器添加辅助功能转子 让 app 可以更快地用旁白导航 然后 升级自定义步进控制器 的辅助功能 自定义控制器通常会导致辅助功能变弱 但现在我们可以直接把标准步进器的 所有辅助功能拿过来用 大多数 SwiftUI API 可在所有平台使用 但我们还在不断地做出恰当的调整 让每个平台变得更好 让我们来给 macOS app 加上多栏表格 我已经为此新建了一个文件 所以只用把表格组件添加到这里 然后在里面添加三栏数据 现在 让我们运行一下 macOS 版的 app 搜索栏的位置和设想的一样 就在工具栏里 输入时 下方也会出现搜索结果推荐 切换到我们新添加的多栏表格 我们也可以看到 搜索结果 当然 我们也可以删除搜索内容 让一切恢复原状 再看看食谱 打开旁白 有了旁白 我们可以轻松访问转子 快速选择列表页里的奶昔 并且旁白与自定义步进器的交互 变得和标准步进器一样 让所有用户可以轻松使用 我们正在用这些新功能构建我们的 app 这样我们就可以知道它们对你们的 app 是不是也有用 这些只是新功能的冰山一角 再给你举个例子 你肯定还会喜欢 SwiftUI 的新材料(模糊效果)支持功能 在 Fruta app 里 想让视图变得更有趣 可以添加背景图 同时要让文字清晰可辨 可以采用新材料风格中的一种 置于文字底层 文字会跟着背景动态变化 因此 这里二级标题的颜色不是 在不透明背景下常用的灰色 SwiftUI 可以快速自动渲染文字 符号 甚至分隔符等标准 UI 只需一行代码 你的界面就可以自动地 变得和这一样美观 还有更多精彩等你发现 有了这些升级后 SwiftUI 将是你的不二之选 你可以用它在所有 Apple 平台上 为你的用户创造非凡体验 今年 在 iPad 上的 Swift Playgrounds 里 你将也能用 SwiftUI 开发 app 这实在是乐趣十足 下面 Matt 会为你详细介绍
Swift Playgrounds 非常适合用来学习编码 数百万人也已经用它来 进一步学习 Swift 语言 除此之外 我们还了解到你们很多人已经 在用 Swift Playgrounds 做试验 勾勒新想法 玩转 iPadOS SDK 里的新功能 今年 Swift Playgrounds 4 将实现新突破 不仅让你可以构建 app 甚至还可以把它们从 iPad 直接发布在 App Store 上 现在在 iPad 上也能用 Swift Playgrounds 开发 app 这样 你的开发效率可以达到前所未有的高度 你可以随时随地用任意设备 实践你的想法 并且新项目格式以包为基础 你可以在 Swift Playgrounds 和 Xcode 之间 无缝切换 让我们一起来看看 这是 Swift Playgrounds 4 里面有所有的 Learn to Code 课程 给全世界的开发新手提供帮助 现在 你还可以在里面创建项目 构建 SwiftUI app 让我们来新建一个项目 看看能构建什么 我将打开新创建的项目 在 Swift Playgrounds 里的 app 项目 编码在左边 工作成果在右边 这正是我熟悉的排版 它的新奇之处在于深度支持 SwiftUI 并采用 Xcode 中的相同技术 实现实时交互式预览 我的新项目模版自带 Hello World 的预留位置 我可以轻松将它换成我自己的文本视图 输入 Text 在插入点下方 就马上会出现代码自动补全建议 这是这个版本新有的功能 接受代码补全 输入我自己的欢迎消息 我一边输入 我的 app 一边实时更新 显示出我每一次键入所做的更改 现在 再玩点有意思的 我会把这个静态文本换成按钮 选择文本视图 从资源库里添加按钮 在资源库中 我可以浏览搜索 我项目中的素材 以及 SwiftUI 视图、修饰器 颜色和 iPadOS 里的 SF Symbols 目前 我就只添加按钮 我会用一个简单的 print 语句完成动作
主体部分 我会用一个带系统图像的标签 文本填 "Say Hello"
图像为 Swift 的 SF Symbol 这样 我的 app 里就有了一个交互按钮 当我点击它 我输入的 print 信息 就会出现在屏幕底部的消息气泡里 打开控制台 我可以看到 print 语句的历史输入记录 打开项目后的执行记录都在里面 而且在我和 app 交互时 它会实时更新 现在 按钮是紫色的 因为这是 app 的主题色 我创建项目时 Swift Playgrounds 帮我选的 打开文件侧边栏 可以看到 app 里所有高级设置信息 如名称、主题色和图标 虽然我很喜欢紫色 但这张笑脸 用橙色会显得更灿烂鲜明 所以我要在这里更换主题色 我的 app 图标以及 刚刚创建的按钮的着色也会随之改变 这很有趣 但是 Swift Playgrounds 并不只是用于试验 我在开发另一款 app 也已经有一段时间了 我用它来记录 我花在兴趣爱好上的时间 我认为大家可能也会觉得这个 app 有用 通过全屏模式 我能大概知道 app 安装后的样子 现在 我可以用全屏 两栏或三栏的布局探索我的 app 我可以随时退出全屏模式 回到代码编写界面 感觉不错 我觉得是时候把努力的成果 用 TestFlight 分享给家人和朋友了 拥有 Developer Account 的人都 可以通过 App Settings 上传自己的 app 只要他们为 App Store Connect 做好了准备 当我点击上传按钮 Swift Playgrounds 就会 构建、打包和上传我的 app 然后 我可以跳转到 App Store Connect 网站 通过 TestFlight 发布我的 app 完成这些后 提交给 App Store 与世界分享 这就是 Swift Playgrounds 4 的大致内容 在 iPad 上就可以使用 SwiftUI 开发 app Swift Playgrounds 4 预计今年晚些时候推出 你一定会爱上自由开发 app 的感觉 随时随地 随心所欲 接下来交给你了 Susan
我们大多时候都是 通过视觉感受世界 使用 Apple 设备时也是如此 我们图形处理、显示和增强现实方面的技术 一直处于中心和前沿的重要位置 无论你是在 Apple Watch 上查看 全天候视网膜屏 或是在 iPad Pro 上使用视频工具 享受 ProMotion 自适应刷新率技术 在 iPhone 上玩游戏 还是在 Mac 上创建沉浸式 3D内容 这些技术都发挥着重要作用 接下来 Myra 和 Eric 将会先从 增强现实技术方面开始 为你介绍今年的新进展 增强现实是一项强大的技术 你们也已经在自己开发的 app 中利用它 改变着我们工作、娱乐 和表达自己的方式 现在支持增强现实技术的 iPhone 和 iPad 在世界范围内已超过十亿 不论是开始将增强现实技术加入你的 app 里 还是直接开发新的增强现实 app 现在就是最好的时机 以前 开发出好的增强现实 app 需要 开发者精通 3D 建模 并掌握复杂的渲染引擎 但是 我们想让你们所有人都能够 打造出令人惊叹的增强现实体验 所以我们推出了一整套技术 让你们更容易运用增强现实技术 RealityKit 是其中之一 是我们从底层开始专为增强现实而打造的 用于 3D 渲染、音频、动画的物理引擎 RealityKit 让渲染 沉浸式增强现实体验变得简单 它带有光真实感绘制渲染 和镜头般的效果 例如噪点和动态模糊 RealityKit 也充分调动了我们的最新硬件 如激光雷达扫描仪 它能让虚拟事物 与真实世界融为一体 并实现 People and Object Occlusion 这些都写进了 Swift 里 今天 我们发布 RealityKit 2 这次重大升级给你带来更多的 视觉、音效和动画控制 并解决开发增强现实 app 中 最难的部分 也就是创建 3D 模型 如果你之前建过模 你知道建一个模型就要 花费数小时和数千美元 现在有了 Object Capture 你就能在几分钟内建立模型 先用 iPhone 拍一个物体的 2D 图像 然后 Mac 上的 Object Capture API 能把图像变成生动的 3D 模型 这是专门为增强现实进行的优化 这个过程如此简单 先用你的 iPhone 或 iPad 拍摄 这个物体各种角度的照片 包括底部 我们的技术支持对物体的翻转 以及自动的前景分离 你可以使用像 Qlone 这样的 app 它能提供优质的指南 帮你简化工作流程 这样 使用 Object Capture API 只需要几行代码就能建立 3D 模型 在 RealityKit 创建一个新的 PhotogrammetrySession 导向存有你拍的照片的文件夹 然后 调用 process 函数 在你想要的细节级别上建模 就是如此简单 Object Capture 能让你创建 为增强现实快速查看优化的 USDZ 文件 这样用户能够在信息 app、邮件 app、 Safari 浏览器 和其它 app 上浏览 USD 或 OBJ 资源包也可以 通过 Object Capture API 创建 它们能够用于光线追踪 和其他后期制作的工作流程 把真实世界中的物体变成 3D 模型 从来没有像现在如此简单过 现在你可以使用 Object Capture 和我们的样本代码来开始建模 我们也在和一些顶级 3D 内容创建工具进行合作 将这个工作流程加入很多 你们已经在使用的专业 app 中 像 Unity Mars、Cinema 4D 和 Qlone 今年晚些时候会推出 将 Object Capture 建的模型导入 Xcode 并使用新的 RealityKit API 增加效果非常简单 我和我的团队已经测试了 Object Capture 先扫描我们最喜欢的食物 我们还创建了一个增强现实版的轻 App 来分享我们的食谱 其中还包括食物的增强现实预览 我们之前用 Qlone 拍摄的巧克力可颂 其实是虚拟复制了 我们一位团队成员真实烘焙的可颂 我想将它加进我们轻 App 的食谱里
我先把这个可颂的 3D 模型拖到 我的增强现实 App 项目中 接下来 需要用 ARKit 将它 部署到轻 App 代码里 并把它作为资源文件初始化 Model Entity 我可以随时用 Xcode 快速查看 全面检查 3D 模型 无论在项目进行中还是部署我的轻 App 前 在我们的轻 App里 使用了各种新的 RealityKit API 给每个增强现实版的餐点添加特效 因为 RealityKit 是一个本地的渲染引擎 我们可以在轻 App 里 加入多个增强现实场景或者食谱 让我们来看看
我来扫描这个轻 App 码 就直接打开了轻 App 把这个虚拟巧克力可颂锚定在桌面上 为了让可颂看起来更真实 我们使用新的 RealityKit 自定义表面着色器 添加放射光并减少环境光遮蔽 让我们来看看团队成员做的其它食物 比如煎牛排 这里我们在自定义表面着色器上 加了用新的 Procedural Geometry API 做的蒸汽特效 来插入 flip-book 着色器 因为蒸汽是程序创造的 所以我们可以将同样的特效 加在很多食谱上 比如这个披萨 看这个蒸汽特效会根据 披萨的尺寸而慢慢变化 在这只烤鸡上 我们加了一个全屏的后期火焰特效 来表示这道菜很辣 最后 我们去掉了一些火焰 用新的计算着色器和几何修饰器 给这个生日蛋糕旁边撒上欢庆彩纸 你可以看到 我们开放了 RealityKit 渲染 的自定义功能 我们迫不及待地想看到 你们将怎么用这些新的 API 发挥你们的创造力 这些只是一部分激动人心的新变化 在增强现实上 我们要让所有的开发者 都能创建 3D 模型 带给大家更多沉浸式 和真实的增强现实体验 我们使用 ARKit 和 RealityKit 时 发挥着重要作用的 是我们的图形处理技术 Eric 会和我们谈谈最新进展 我们在 Apple 开发产品的核心理念 就是把最好的硬件和软件 结合起来 我们开发图形处理技术时也是这么想的 这些年来我们给 iPhone 和 iPad 配备了 Apple 设计的图形处理器 结合 Metal 图形处理技术和各类计算 API 帮你充分发挥出我们产品的强大功能 现在 有了 M1 芯片 我们不仅 让最新的 Mac 和 iPad Pro 拥有了前所未有的 图形处理性能和能效 而且还创建了一个统一的 Apple 图形处理平台 它的架构创建基于 Metal、 Apple 设计的图形处理器和统一内存架构 无论 iPhone、iPad 和 Mac 都一样 这个平台带来了质的飞跃 那些之前需要高端工作站 和配置独显的游戏电脑 才能完成的图形密集工作 现在在我们大多数产品上都能完成 例如 这个统一平台的性能堪比游戏主机 让 Larian 这样的开发者能将他们的 3A 游戏 Divinity Original Sin 2 移植到 Mac 和现在的 iPad 上 Deep Silver 正在使用 M1 芯片 和 Metal 的现代着色器管道 让他们 Mac 端的生存游戏 Metro Exodus 拥有高性能和沉浸式图形效果 但是 这个图形处理平台并不仅仅是为游戏打造的 各类 Metal 计算 API 也正驱动着 各个新一代专业图形处理器渲染器 比如 OTOY 全新的 Octane X Maxon‘s Redshift 的 Cinema 4D 渲染器 有史以来第一次 由 Metal 技术驱动 在 Mac 上高速运行 所以 为了让你的图形处理 app 和游戏 能在所有 Apple 的强大设备上运行 我们今年重点关注两大领域 先进的图形处理技术和游戏功能 以及强大的图形处理开发工具 首先 我们关注三个重要功能 它们对当下的高端游戏和 图形处理器渲染算法至关重要 为了加速复杂的数学运算 模拟真实光线 复刻真实表面 现代图形处理器渲染器需要将 Metal 图形处理技术和计算命令 插入到同一个管道中 这也是为什么 Metal 现在可以 直接从你的图形着色器 调用动态库 和光线查询 你可以使用 Metal 光线追踪 API 中新的 Stochastic Motion Blur 功能 来创造更多的光真实感绘制渲染 为了让游戏帧率更高 延迟更低 画面抖动更少 开发者需要调用更多显示技术 为了实现这一点 并利用最新款 iPad Pro 卓越的图形处理性能 你的游戏可以使用 Metal presentation time API 和 ProMotion 自适应刷新率显示技术 基于你想要实现的渲染和输入之间的延迟 动态调整你 app 的帧率 macOS Monterey 增加了对 自适应同步显示技术的支持 这意味着你现在可以 把这些超低延迟和可变刷新率显示技术 用在你的 Mac 游戏上 如今 支持先进图形处理的高性能游戏 通常都设计了支持游戏手柄 增加游戏手柄支持 是一个非常简单但强大的方法 通过这一常用的输入模式 轻松将你的游戏带到 我们的统一图形处理平台上 我们的游戏控制器框架现在支持 各类热门的游戏手柄 包括 最新 Xbox Series X 无线控制器 和 PlayStation 5 DualSense 无线控制器 并支持触感反馈 为了将支持游戏手柄的游戏 更容易移植到 iPhone 和 iPad上 我们增加了一个新的 API 这样你只写几行代码就可以 添加屏上虚拟游戏手柄 游戏手柄的支持现在更有意义了 因为在 macOS Monterey 和 iPadOS 15 上 玩家可以全程用手柄来 找到朋友正在玩的游戏 调用 App 资源库启动游戏 点击“共享”来录屏 自己最爱的高光时刻 现在 除了这些先进的全新 API 和功能 Xcode 13 为你增加了 强大的新图形处理开发者工具 帮你优化和调试图形处理器的代码 所有设计都是为了让你的高性能游戏 和图形密集 app 突破新境界 首先 在开发高性能图形处理渲染器和游戏时 图形处理器着色器占用的空间会很多 调试上万行跨上千个 平行运行的工作群组的 着色器代码 需要花费大量时间 为了帮你简化这一流程 Xcode 13 增加了 Selective Shader Debugging 这里我们正在用 Selective Shader Debugging 在一个更大的图形处理器着色器中 精确选择需要调试的功能 这能极大减少循环访问和调试时间 哪怕是你最大的着色器 也能让你开发速度变快 把注意力放在给图形处理器代码 增加功能和性能上 接下来 高性能 3A 游戏 也需要最新的先进纹理压缩支持 所以我们更新了我们强大的 纹理转换器工具 让你能直接控制 纹理转换压缩管道 我们还增加了全新的光线感知像素变换 并且极大地拓展了对 Mac、PC 和 iOS 游戏 使用的最新 ASTC 和 BC 纹理压缩格式的支持 这样 为每个 Apple 设备 优化游戏纹理资源变得更加简单 最后 为了帮你在最高性能渲染下 实现峰值性能表现 Xcode 13 在 Metal 调试器里 增加了全新的图形处理器时间线视图 这个新视图可以一目了然地 让你基于时间线来可视化调试 Metal 指令、资源和缓冲区 除此之外 还带有强大的性能计数器 和瓶颈分析信息 通过 Apple 设计的中央处理器、 图形处理器和 Metal 技术 我们打造了一个覆盖数以十亿计设备的 统一图形处理平台 推出了最新的功能和开发者工具 让你的各类图形密集任务、专业 app 和游戏 的能力和性能突飞猛进 Susan 接下来交给你了
你的 app 让人们 接触到各类创意、服务和工具 最重要的是还能让人们建立联系 平衡好这一切和建立联系一样重要 因此 今年 我们可以让你帮助用户 在合适的时候专注使用你开发的 app 在帮助管理亲友设备的同时 尊重他们的隐私 让你的 app 充分利用不同 Apple 平台 创造的全新、共享和亲密体验 我们创建了一套强大的新 API 帮助你的 app 来实现这一切 接下来先请 Heena 和 Matt 给我们介绍专注模式 iOS 15 推出一组强大的工具 能帮助人们专注当下 这些工具能减少干扰 这样人们就不会分心 这一切从通知的全新调整开始 这些通知 正堆在我的锁定屏幕上 它们的紧急程度明显不一样 但它们的运行方式一模一样 它们的外观和触感反馈一样 也看不出来哪条通知更重要 现在 有了新的 Interruption Level API app 可以采用更多带有细节差异的方式 来表达不同的紧急程度 通知可以归类成四种干扰等级之一 Passive Interruption 无声且不会唤醒设备 人们在下一次拿起手机的时候就能看见 你可以将其设于 时效性不强的通知上 Active Interruption 会带有音效和触感反馈 和现在的通知一样 Time Sensitive Interruption 设计得较为显眼 它还会在锁屏上停留一段时间 如果用户一直没有点击它 Siri 也会读出这些通知 如果用户戴着 AirPods 你可以将其设置于 需要马上查看的通知 Critical Alerts 最紧急 即使设备静音 它们也会播放声效 只有关系到健康和安全的重大通知 才能设置成这一等级 而且设置时需要用户赋予权限 还有另外一种通知 需要特殊关注 那就是别人发送的聊天消息 如果你有一个聊天 app 重要的是要 告诉你的系统 这是你的消息和来电通知 这样系统就会 调整你通知的样式和运行方式 就能让人们更好地查看消息 系统调整后 你的消息通知 会从标准样式变成这样 一个显眼的头像和 app 图标重叠在一起 同一个头像还会在系统的其它地方使用 比如共享表单 看见这些头像 我很激动 所以通知能有效地 吸引人的注意力 但这种吸引也是非常短暂的 如果一些通知没有在恰当的时间出现 人们就很容易错过 为了帮助用户能在自己想要的时间查看通知 我们推出了通知摘要 它能集中推送通知 而且是在用户自己选择的时间点推送 这样他们就能在最方便的时候查看通知 摘要会集合一些 Passive 或 Active 的通知 这些通知来自用户自选的 app 推送的布局非常美观 它会在锁屏上持续显示一段时间 用户查看后将消失 每个用户可以个性化定制摘要 你可以看到顶部有两个轮播位置 这里呈现的内容是由一些因素所决定的 首先 为了提供多样化的内容 这两个 app 是在摘要内部抽样调取出来的 这里我们额外加了一些权重 带有大缩略图的通知 总是比没有大缩略图的优先入选 同样 相关性分数最高的通知 当然这个分数由你决定 会在同一个 app 里比其它通知优先选中 那你可能会想 我的 app 最后会怎么 呈现在摘要里呢 首先 一切完全取决于用户 是否想要使用通知摘要 如果他们用 推送通知最多的 app 会得到推荐 用户接下来可以自定义出现在摘要中的 app 并设定他们想要收到摘要的时间点 如果你的 app 已经放进定制好的摘要里 你还是可以给用户推送实时通知 这个时候 Time Sensitive 通知就派上用场了 设置成这一干扰等级的通知 会被马上推送给用户 请记住 把通知标记为 Time Sensitive 只应在需要用户立刻查看 或与当下相关的时候 在减少干扰方面 没有功能比 勿扰模式做得更好 但是勿扰模式会把所有通知静音 而我们想要给用户更多灵活性 有了专注模式 用户可以选择 他们能够收到通知的 app 和人 这具体取决于他们在做的事情 他们可以工作一整天或打开专注模式 来打游戏、看书或健身 进入专注模式后 用户可以分享状态 给其他人 来避免打扰 但如果情况非常紧急 消息可以通过 Notify Anyway 让接收者看见 你的聊天 app 也能申请 获取用户的专注模式状态 如果得到许可 当状态改变时 系统会通知你的 app 这样你的 app 显示的状态 能与系统同步 你的 app 也可以为用户提供 突破勿扰进行紧急联系的能力 我们在给用户前所未有的掌控度与灵活性 让他们管理好自己的通知 并且为了确保这些工具有在真正的帮他们 系统会定期地查看 是否在设置中做出某一具体调整能够有所帮助 这基于用户怎样与你的 app 和其推送的通知交互 如果用户通常在专注模式时用某 app 那么系统就会建议处于专注模式时 允许这个 app 发送通知 又或是如果用户在与一个 app 的 Time Sensitive 通知交互 那么系统就会建议 把这些通知调回 Active 等级 同样 如果一个 app 不断发送通知 而用户没有任何回应 系统可能会建议 将所有这个 app 发送的通知静音 或者是将其中某个对话 静音一段时间 所以为了充分利用这些新功能 你需要做几件很关键的事情 你可以确保合适的内容 占据摘要顶部的轮播位置 通过设置通知相关性分数 并配上合适的略缩图即可实现 你需要仔细思考一下哪一干扰等级 最适合你的通知 如果你有一个聊天 app 你应该采用 新的 User Notifications API 来告诉系统 你的消息和来电通知 你还应该在你的 app 里显示 用户的专注模式状态 通过使用新的 Focus Status API 即可实现 我们认为在你的帮助下 这些工具能有效帮助用户减少干扰 接下来 Martin 会介绍新的屏幕使用时间 API 谢了 Matt 现在让我们来聊聊屏幕使用时间 和家长控制 我们意识到家长需要现代化 和创新的解决方案 来帮助孩子们 建立健康的数字生活 并且他们也十分注重家庭的隐私 我们看到了你们当中很多人 想要满足这些用户需求 因此 今天 我们推出屏幕使用时间 API 一组量身定制的家长控制框架 其设计也基于我们保护隐私的承诺 在开发屏幕使用时间 API 时 我们想实现三个重要目标 一 给你们提供现代化方案 来更好地开发家长控制 app 二 给你们赋能以打造充满活力的体验 并持续创新 做得比现在的屏幕使用时间更好 三 保护用户隐私 为了做到这点 我们增加了三个新的 Swift 框架 到 iOS SDK 中 让你们能够 在家长控制方面创新 设备管理设置、家庭控制 和设备活动 首先 让我们来聊聊设备管理设置 从根本上来说 你的家长控制 app 需要在孩子的设备上限制他们的行为 并且确保 这些限制始终有效 除非家长自己改动 有了设备管理设置 你的 app 可以设置一系列的限制 比如锁定账户、防止修改密码 过滤网站流量和限制应用程序使用 这和屏幕使用时间很相似 但是配合你 app 的品牌和功能定制 利用这个框架 你的 app 能够 管理所有这些限制 除此之外 你还能够在适当的时候 限制 app 和网站的访问 并提供一系列专属于你用例的操作 最后 我们将 app 原地锁定 这样只有在得到家长许可后 它才能被卸载
家庭控制框架是 我们隐私保护模型的核心之一 并服务于两个重要的客户体验 首先 它让家长能授权你的 app 管理他们的 iCloud 凭证 确保设备是家里的孩子在使用 它还能提供个性化的体验 通过系统 App 和网站选择器 让家长选择需要受限的 app 和网站 同时保护用户隐私 我们想要让家长可以管理并限制 他们的孩子使用的 app 和访问的网站 但是同时不泄露他们的 隐私应用和网站浏览信息 因此 选择器并不交还所采集的 源数据 bundle IDs and URLs 而是交还 opaque tokens 这些令牌让你的 app 可以追踪 家长想进行管理的 app 和网站 同时确保只有家长 才能获取这些机密信息 这些令牌在所有框架中 都能发挥作用 使用令牌限制使用某一 app 或网站 利用设备管理设置 或深入了解 app 和网站活动 这些之前在 iOS 上做不到的事情 现在有了设备活动框架就能够做到 有了家庭控制的 活动选择器提供令牌 你就能利用设备活动的强大能力 你可以注册独特的时间窗口 提供给不同的 app 和任务 每个都发出如“还剩五分钟"的警示 和一个完成事件 你的 app 接收到这些事件 就会相应地做出反应 如改变限制 限制使用相关 app 和访问相关网站 又或是 鼓励孩子去做作业 无论你试着将什么样的体验 带给你的客户 查看设备活动 不仅是浏览器活动 而是设备上所有 app 的活动 这是一个全新的概念 也是一个独特的机遇 能让你在家庭控制方面实现创新 有了屏幕使用时间 API 你可以设定 全家的设备停用时间 或者建立一些奖励机制 让孩子在学习后可以娱乐一下 比如 做了作业后 就可以解锁一些游戏 我们非常激动 也很期待 你们会如何利用这些 API 来帮助家长和不同的家庭 管理使用我们设备的方式 接下来让 Vi 来介绍一下 小组件方面的最新进展 去年 我们在主屏幕添加了小组件 好评如潮 小组件提供深度个性化定制 悦目又及时地让你看到 你 app 中相关程度最高的内容 就是要一目了然 人们喜爱小组件展现 你 app 中最有用的信息的方式 只需一眼 在恰到好处的时间 点一下就能深度链接到 app 中合适的位置 过去一年 你们创造了一些 小组件的非凡体验 让我们倍受启发 最好的小组件是有重点的、动态的 并且全天展现 app 的各种独特视图 比如这个来自 Day One 的小组件 这张照片是我和我的孩子 在去圣克鲁斯岛的路上拍的 展示恰当的内容 并且是在合适的语境中展示 能帮你的用户 发现你的 app 的神奇之处 而且我们发现小组件 能鼓励人们多多使用你的 app 今年 我们要做的 是通过小组件让你的 app 更好用 更容易被看到 首先 就要让人们把你的 app 的小组件 放到 iPad 的主屏幕上 为了更好地利用 iPad 的大屏幕 我们推出了新的超大尺寸的小组件 这意味着这类全新的小组件能够 有机会在 iPad 上发挥它们最大的作用 为了让调用小组件更加简单 我们把含小组件的全新默认主屏幕布局 加到了 iPhone 和 iPad 上 里面包括人们最常用的 app 的小组件 它们是通过智能堆放排列的 堆放能帮你节约空间 通过小组件层叠的方式实现 智能堆放利用设备端智能 来展示当下最相关的小组件 在去年的 TimelineRelevance API 基础之上 我们不仅只是 利用设备端智能 循环堆放中的小组件 现在我们可以通过推荐 来增加你的小组件的曝光度 哪怕你的小组件之前 并没有在堆放里 那我们要怎么做到这一点呢 进入小组件推荐 人们与你的 app 的交互 还有你告诉我们的内容 可以帮我们推荐人们 把你的小组件放进堆放 让我们用 Fruta app 做个示例 如果用户每天早上点一杯绿色果汁 设备端智能就会开始学着推荐 为了让用户选择加入 你需要采用 Intents 框架 然后 donate an Interaction 就是这样 现在你的小组件 会被自动推荐 这基于人们怎么使用你的 app 当你想要给用户提供新信息 你也可以使用 Intents API 来 donate 例如 Fruta app 可以利用它 在过生日的时候免费提供一杯奶昔 历史使用行为和 新的相关 intent donations 能够帮我们把你的小组件推荐到堆放中 而且是在合适的时间点推荐 如果用户觉得你的小组件很有用 他们可以长按小组件 轻松将其加为常驻 这就是今年小组件的重大升级 使其比以往更加实用 更容易被人们发现 接下来 是关于 SharePlay 的新消息 交给你们了 Ryan 和 Juan 今年 我们都不得不赶紧寻找 与他人联系沟通的新方式 我们深受启发 看到你们积极创新 开创了很多不同寻常的新方式 让人们即使天各一方 也感觉像是从未分离 随着人们比以往更依赖 FaceTime 通话和 iMessage 信息 来保持联系 我们也自然要在这基础上 继续帮人们在难以相见的时候 保持紧密联系 人们相聚时 最有意义的时刻 并不只是聊天 还有一起分享体验 为了帮大家维系在一起的感觉 我们需要打造一些全新的东西 我们制定了一个突破性的方向 我们希望 FaceTime 通话成为一个传送门 把人们送进共享空间里 让亲朋好友们相聚 所以我们打造了 SharePlay 并提供给你所需的工具 凭借 Group Activities 框架 来实现神奇的 SharePlay 体验 我们的技术让大家能一起体验你的活动 归根结底都是活动这个概念 当 FaceTime 通话里某一个人发起一个活动 SharePlay 会把整个群组带到你的 app 里 实现丰富多样的互动体验 就像大家见面交流一样 有了 Group Activities 框架 无限可能等着你探索 在你的虚拟客厅里还有什么比 和好朋友们一起追剧 更开心的事儿呢
嗨 Juan 你的团队刚刚把 SharePlay 支持整合到视频 app 里 给我们展示一下吧 好的 你想要看什么 Ted Lasso 怎么样 听起来不错 我点击播放 系统就会问我 我是想要开始共享播放 还是本地播放 这就到了你出场的时候了 我们提供新的 API 来开始播放 这些 API 在设计上就为了 适用于你 app 现有的视频服务 现在 因为我选择了共享播放 系统正在把我设备上的视频 和 Ryan 设备上的视频进行同步协调 Core Media 和 Group Activities 在这个过程中做了大部分工作 这意味着当我按下暂停 Juan 设备上的视频也同步暂停了 我甚至还可以跳到我最喜欢的地方 然后这会在每个人的设备上同步 就像我们都在同一个房间一样 好吧 我想说 今天 我会和 Higgins 一起吃午饭 我超喜欢这个场景
共享播放的神奇之处在于 你的媒体并没有被转码传输 每个人都能看到你的全保真视频 因为它还是在你的 app 里播放 从你的服务器流播 这和以前一样 现在让我们看看在一个视频 app 里采用 Group Activities 并充分利用这个框架有多简单 只需要几步就能在你的 app 里使用 共享播放功能 首先 我们需要定义我们的 Group Activity 我们要创建一个新的类型 遵守 Group Activity 协议 并给每个在群组里的人提供一个 URL 进行加载 如果你的 app 已经能支持内容的深度链接 你可以在这里用这些链接 我们也能给系统提供一些基础的元数据 来定制系统 UI 比如确认对话框和通知 接下来 我们需要连接我们的播放按钮 在我们的 play() 函数里 我们会创建一个新的活动 并调用 .prepareForActivation() 这个时候系统就会弹出你之前看到的 确认对话框 你不用加任何其它的条件从句就能调用 如果用户没有在 FaceTime 通话中 它会立马返回 现在让我们把注意力放到处理将要进行的活动上 发起人加入 session 时与其它参与者无异 所以每个人的代码看起来都一样 这里 我正在用 Swift 并发 创建一个新的模型 也还会用到之前创建的每个 session 接下来当播放器出现后 我们加入新的 session
你可以看到其它状态变化时的 session 来相应地更新我们的 UI 最后要确保我们同步了播放器 第一步 取出你的 AVPlayer 然后在对应的 session 里 调用 .playbackCoordinator .coordinateWithSession 方法
第二步 没有第二步了 就是这样 你只需要让帧率准确的 AV 与 Group Activities 和 AVPlayer 同步 系统会负责剩下的部分 我们刚刚聊了很多视频共享体验 但是我们想要 Group Activities 提供一个基础 让你能打造出 你能想到的最棒的体验 所以我们开始基于驱动目前 FaceTime 群组通话的架构进行构建 给你的 app 提供一个快速且可靠的数据通道 作为群组领导者 我们的服务器将整个群组 集中起来 让它们变得有序 这些服务器不会看见你的用户数据 因为它是全部端对端进行加密的 来实现隐私保障 使用这个快速安全的数据通道 你可以创造沉浸式体验 比如在共享书籍上翻页 或者实时看别人 在共享白板上涂画 我们希望这能启发你 充分利用我们的 API 让你的用户们能以前所未有的 方式保持联系 我在做这个演示前 需要先打开视频通话 让大家一起帮忙
大家好 谢谢你们的加入 我需要你们帮我完成最后的演示 真正地展示 Group Activities 的力量 好了 我们用共享的白板来展示 用 Group Activities 可以做什么 现在我打开了一个共享画布 我要发起一项新的活动 和群里的人一起在上面画画 现在我们都对着同一个画布 我们可以通过全新的方式进行互动 如果我在画布上的某处写字 每个人都能实时看见我写的东西 现在这个 app 正在用你之前看到的相同的 API 和同步视频不一样 它用的是 GroupSessionMessenger 来把画布上的每一笔发送给大家 而且这不是屏幕共享 因为这个 app 是在每个人的 iPad 上本地运行的 我也可以在画布上写字
让我们来试试
这样 我们可以基于这个共享画布一起创作 不管我们离对方有多远 这让我们之间的联系比以往更加紧密
谢谢你们的帮忙 最棒的是 你刚看到的 SharePlay 活动、播放同步 以及快速安全的数据通道 所有这些好处都能实现 你只需要让你的 app 整合 Group Activities 框架 SharePlay 提供了一种全新方式来提升你的 app 内容 也能让你为你的用户 创造更具沉浸感的体验 我们迫不及待地想要看到 你们利用 Group Activities 会创造出什么新的共享体验 现在 请 Susan 给我们做一个总结
我们相信你今天看到的这些新成果 能帮你继续打造 具有影响力的 app 我们正在打造简化你工作流程的工具 让快速开发优质 app 变得更简单 我们为专业人士简化了 创造沉浸式内容 开发游戏和工具的过程 我们向你展示了你的 app 能如何帮助用户联系 并同时让他们专注于最重要的事情 你今天所看到的只是一个开始 这周还有更多 我们没有机会谈论的精彩内容 等着你去了解 我们知道你将会创造非凡体验 我们拭目以待
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。