大多数浏览器和
Developer App 均支持流媒体播放。
-
Platforms State of the Union
Take a deeper dive into the latest tools, technologies, and advances across Apple platforms to help you create even better apps.
资源
-
下载
♪ ♪
♪ ♪
欢迎来到 WWDC 2022 State of the Union 我们总是兴奋地迎接 WWDC 因为它提供了非常好的契机 让我们可以与你们所有人沟通 分享我们最近的工作进展 以及更好地理解 你们需要我们的开发者平台提供什么 你们作为开发者所做的工作太了不起了 你们将奇思妙想变成现实 将用户体验推向新高度 而我们想帮助大家 让你们的想法走得更远 我们已经在 Keynote 主题演讲中涵盖了 iPhone、iPad、Mac、Apple Watch 和 Apple TV 上的一些新功能 还有 Apple 芯片令人难以置信的强大性能 助力大家把最有雄心的想法变为现实 我们今天要讲的内容很多 首先来讲一些更新 今年早些时候 我们开启了全新的 Apple Developer Center 让大家和 Apple 的工程师和设计师 一起沟通与协作 且就在 Apple Park 去年秋天 有成千上万跟你们一样的开发者在世界各地 参加了我们全新的线上 Tech Talks 我们用 5 种语言在线直播了 来自 11 个国家的数百场现场活动 对我们来说 Tech Talks 系列最棒的地方之一 就是一对一会面 这给我们提供了绝佳的机会 了解大家的工作 分享一些建议和指导 去年秋季我们推出了 Swift Playgrounds 4 让大家有能力可以构建 app 并直接提交至 App Store 还提供了对 SwiftUI 的支持 使其成为用于测试 和 UI 原型设计的绝佳工具 当然还有 Xcode Cloud 我们打造 Xcode Cloud 是为了帮助大家 更快更容易地打造更好的 app 它是一项持续集成与交付服务 且内置于 Xcode 采用云托管 Xcode Cloud 支持所有 Apple 平台的开发 它集成了 TestFlight 和 App Store Connect 以及所有主要基于 Git 的源代码提供程序 它甚至拥有各种 REST API 协助联结开发过程中的其他方面 并保有高度的安全性 来保护着你和你的项目 我非常高兴地宣布 Xcode Cloud 从今天起正式推出 我们认为几乎每个开发团队 都能从 Xcode Cloud 获益 因此我们将其定价置在 所有规模的开发者都可以使用的水平 我们将提供每月 25 小时的订阅 给所有 Apple Developer Program 用户免费使用 持续到 2023 年底 大家还可以从 Developer app 中 订阅任意一级 Xcode Cloud 服务 今夏晚些时候推出 今天 我们要来谈三大主题 首先 我们想分享一下 我们对 Apple 平台开发的愿景 我们平台目前现状 以及我们未来前进的方向 然后 我们会分享一些激动人心的新方式 让你开发的各种 app 与 Apple 平台的系统体验 相互整合 最后 我们要讨论各种强大的全新 API 并向大家展示它们可以如何 帮助你的 app 实现更强大的功能 首先看看我们对开发者平台的愿景 以及它是如何持续进化的 下面请 Josh 为你介绍 优秀的开发者平台可以提供 不同编程语言、框架和工具间的深度整合 当三者完全相辅相成时 我们就可以确保 常见的任务可以轻松完成 并且将实现不常见的任务也变为可能 把这点做好 可以缩短开发一款优质 app 要走的路 并造福所有人 用户可以获得一致的体验 就像总是感觉到顺滑的滚动浏览 而你也可以把时间和精力 专注在构建你的 app 与众不同的地方 随着设计的演变 以及硬件的持续发展 过去的前沿技术在今天变成了基础 Objective-C 语言 AppKit 和 UIKit 框架 以及 Interface Builder 已经赋能多代开发者 这些技术是为彼此而构建的 并将在未来很长的一段时间内 继续为我们提供良好的服务 但随着时间推移 新的抽象成为了必要 过去一段时间 大家已经看到我们在很努力地定义 下一代紧密集成的语言、框架和工具 这就是 Swift、SwiftUI 和 Xcode Previews 在这样的开发平台上紧密集成 需要这三部分一同设计和演变 并相互驱动、带动 Swift Result Builder 的灵感 来自于 SwiftUI 的组成结构 SwiftUI 的声明式视图 背靠 Swift 值类型 而 Xcode Previews 是专门为这两者而设计 也是依靠这两者运行的 他们之间相辅相成 带来了我们迄今最优秀的开发平台 今年 Swift、SwiftUI 和 Xcode 都有精彩的更新 进一步实现我们的愿景 让大家更容易地开发出色的 app 并适用于我们所有的软件平台 而这一切都要从 Swift 开始 现在请 Swift 团队的 Ben 为大家介绍
♪ ♪
Swift 具备了快速、现代与安全的特性 它结合了强类型语言的速度 以及易于阅读和编写的表达式语法 它的设计消除了多种类别的编程错误 Swift 绝对是在我们各个设备上 开发 app 的最佳语言 Swift 以开源形式在 Swift.org 上开发而成 Swift.org 上有很棒的贡献者 他们通过 Diversity in Swift 和 Swift Mentorship Program 等倡议互相支持 并推动 Swift 的发展 通过相关主题工作小组 如 Swift on Server 和 C 互操作性等 在过去一年 Swift 变得更加优秀 包括增强了并发功能 还推出了让 Swift 更易于读写的升级 帮你定制工作流的工具 以及惊人的后台性能提升 这一切始于去年 我们推出 Swift 并发功能的时候 Swift 并发功能 极大地简化了并行运行代码的读写 仅第一年就在 App Store 中获得 超过 40000 个 app 采用 这可说是一项巨大的成就 因为这对你的 app 代码库来说 是一项根本且重要的提升 所以现在可以将具有 Swift 并发的代码 部署到过去三年内发布的 所有操作系统上 Swift 并发功能还带来了异步序列 今年更为大家带来了全新的开源包 将为 Swift 丰富的现有序列算法 带来并发支持 这称为异步算法 例如 Swift 的序列协议支持 zip 算法 可将两个序列组合在一起 而异步算法则可以 将两个异步序列组合在一起 因为异步序列是直接集成在 Swift 语言中 所以它们使用的是如“for”循环 为大家所熟悉的结构 而由于有 async/await 语法 这看起来就像普通的直线代码 你还可以使用熟悉的 try/catch 匹配符 处理问题 如网络上异步数据流的网络故障 异步序列的一个关键之处在于 它们是如何随着时间的推移传递数据值 Swift 现在包含一套新的时钟类型 用于表示时间单位 而异步算法则在此基础上 提供多种基于时间的算法 就像这里的 throttle 可以减慢序列的更新 Swift 的并发模型旨在让异步代码 像同步代码一样简便且安全地进行编写 其中很重要的一部分是 Swift 的 actor 模型 actor 让你可以使用线程安全 并发执行的代码隔离数据 Swift 可防止你意外于并行线程之间分享该状态 定义一个主要的错误来源 通过 async/await 即可简单高效地 在不同 actors 之间传递信息 现在 Swift 通过 distributed actors 让 actor 隔离更进一步 distributed actors 可在多个进程 或设备间通信 用“distributed”关键词标记 那些可以远程访问的 actors 和方法 无论是在你 Mac 上的独立进程之间 还是不同设备间的点对点通信 亦或者是从一个设备 与你用 Swift on Server 编写的后端对话
就像 actor 可以帮助 Swift 按照指定顺序访问你的数据来访问它们 distributed actors 使用一种可插拔运输机制 帮助 Swift 让数据在跨进程的场景可用 Swift 编译器随后可以执行检查 确保 distributed 环境中的行为是正确的 让你可以继续开发你想要的功能 distributed actors 和其他并发功能显示出 Swift 代码的读写可以多么容易 当增强功能被深度整合在语法中时 下面由 Ken 来给大家介绍 Swift 易用性的增强 字符串是任何编程语言中 最重要的功能之一 但处理字符串可能会 常常让人感到沮丧 在开发者的工作中 可能会碰到需要从类似这样的字符串中 提取信息的时候 编写解析字符串的代码很容易出错 需要追踪很多细节 而且最后生成的代码 很难读懂及修改 正则表达式是应对这一挑战的 强大解决方式 让你可以描述你期望在字符串中 看到的匹配符 并说明你想抓取哪些信息 今年 Swift 将大幅提升 有关正则表达式的开发者体验 首先是推出一个 全新的正则表达式字面值
它们直接内置于语言当中 Swift 编译器可以检查其是否正确 在你用正则表达式提取信息时 它们会解锁 Swift 类型系统的力量 并且它们充分利用了 Swift 一流的 Unicode 支持 我们一起来看一看 我在开发一款叫 Food Truck 的 app 它可以管理从接单到追踪销售的所有环节 有些订单是以字符串的形式出现的 充满了数据 正则表达式特别适合 从中提取我想要的信息 而在 Playground 中进行实验 再合适不过了 我先创建一个正则表达式字面值
现在输入表达式 提取下单人信息 甜甜圈类型 以及甜甜圈数量 在我输入时 正则表达式被语法高亮显示 这有助于我确认表达式是正确的 现在我来试试看
使用上面的订单字符串 并寻找正则表达式的第一个匹配项
当我运行 Playground 时 就可以通过内联结果 看到正则表达式具体匹配到了 字符串的哪些部分 这里它就找到了我想要的信息 Swift 的全新正则表达式支持 并不止这些 随着字面值变得越来越复杂 就像这里 它匹配的是日志文件的一部分 Swift 提供了一种更好的方式 来处理这些匹配符 即正则表达式生成器
可以很容易地用它把字面值转换为生成器 现在我得到了代码 这些代码更易读懂和修改 我甚至还可以进一步简化它 这里我在找的是一个十六进制的数字 我可以用新的 hexDigitCharacterClass 让我的意图更加明确 这个生成器语法让我可以 轻松创建和扩展表达式 得到我想要的结果 这就是强大的 Swift 中 正则表达式所带来的全新开发者体验 除了字符串语法 Swift 也在透过对泛型语言特性的改进 使其变得更加易于读写 泛型为你每天使用的 Swift 功能提供支持 比如数组类型 它可以容纳任何类型的元素 从字符串到你自定义的类型 泛型代码使用占位符的概念来代替另一种类型 可待之后再确定 通过清除对类型的假设 你可以更清楚地表达代码的意图 并使其容易重复使用 但这也可能使你的代码更难以阅读 举例来说 如果你想以函数参数的形式 处理一个宽泛的歌曲集合 你就需要写出相当多的代码来表达这个意图 如今在 Swift 中 编写接受一些歌曲集合的函数 就像使用关键词 some 告诉 Swift 参数是什么一样简单 可以用更少的代码表达同样的意思 在其它情况下 你可能需要更多的动态行为 比如这个音乐库的播放列表阵列 它可能需要包含不同类型的歌曲集合 譬如说歌曲集或歌曲阵列 新的关键词 any 就可以在这种情况下帮上大忙了 关键词 any 内置于 Swift 当中 让你可以表达 一个可以容纳任何歌曲集合的类型 它也与通用函数无缝衔接 透过采用熟悉的语法和更自然的关键词 使用 Swift 编写泛型代码将更加轻而易举 与 Swift 语言内置功能同等重要的 就是为它而构建的相关工具了 Swift Package Manager 让你可以轻松处理 app 的依赖项 并可利用来自世界各地开发者 所发布的优秀软件包 迄今为止 这些开发者们 已经发布了数以千计的 Swift 软件包 提供代码来解决从验证到网络服务 再到数据管理 专业图形和可重复使用的 UI 组件 各种疑难杂症 今年 Swift Package Manager 将新增全新的 Package Plugins 来扩充你创建和构建代码的方式 Plugins 是可以如同任何其他依赖项 轻易地添加进项目的 Swift 软件包 它们在运行新的 checkout 时 自动下载并构建 不过它们不是你 app 中的代码 而是帮助你构建 app 的代码 Package Plugins 可从命令行 或 Xcode 中调用 可以是构建阶段的一部分 也可按需调用 它们在沙盒环境中运行 在读取或修改代码前会请求你的许可 使用 Package Plugins 扩展你的工作流 将可拥有无限的可能性 你可以用它们检查和格式化你的代码 并使用像 SwiftLint 和 SwiftFormat 这样的软件包 来确保你的代码符合团队的风格指南 或者用 Sourcery 等工具在构建时 自动生成源代码 或者做任何其他有助于你完成工作的事 Package Plugins 可以 很好地扩展 Xcode 仅需写一点 Swift 代码 你可以透过以下两种方式来实现 有按需使用的命令插件 还有构建插件 供你随时需进行项目构建时使用 回到我们的 Food Truck app 这里是我创建的一个命令插件的代码
我的团队对代码有种独特的审美 我们喜欢让导入的语句按字符串长度排序 由短到长 由于 Package Plugins 就是用于定制和控制的 我们创建了一个命令插件 采用 SwiftFormat 来处理这个需求
它可以找到所有本地修改的文件 然后对导入进行排序 这是一个我正在编辑的文件 最上面的导入是尚未排序的 我在整个项目中运行命令插件 我可以选择任何数量的运行目标 这里我就在全部目标上运行 如果我愿意 甚至还可以审查命令插件的代码 我准备好了 直接来运行这个命令 就这么简单 插件就会在我的文件上运行 它找到了所有本地修改的文件 然后以长度排序 使用插件 能做的可不止是格式化 你可以生成源代码、使用 git 甚至是使用自己的自定义错误和警告提示 我还有另一个插件 可以确保把我的代码很好被记录管理 这是一个构建插件 基于开源的 SwiftLint 软件包 所以当我在构建的时候 就可以轻松看到代码中 所有需要添加文档的地方 而且构建插件将一直延伸到 Xcode Cloud 可以作为每个构建的一部分运行 有了 Swift Package Plugins 我和我的团队可以在本地和 Xcode Cloud 创建我们的命令 以及自定义我们的构建 并与他人分享这些插件 这仅需透过几行强大的 Swift 代码即可完成 这就是 Package Plugins 的简要介绍 它有各种方式来大幅提升你的开发工作流 最后 Swift 还迎来了一些惊人的后台改进 现在能以前所未有的速度构建 Swift 项目 依靠新的并行化大幅提升链接时间可快达两倍 并且 Swift 并发运行时间 现在更紧密地与软件系统整合 更好地确保异步任务的优先级 帮助你的 app 保持高效和及时响应 最后 用 Swift 编写的 app 在 iOS 16 上启动时间大大缩短 像是 Lyft 和 Airbnb 等 app 的启动速度提升 可仅为过去的一半 这得益于动态链接器的改进 有了这些后台的提升 工具的新能力 更加易于读写的演进版语法 以及对并发功能的改进 现在正是用 Swift 开发的最佳时机 Swift 绝对是最佳语言用来 开发跨我们所有设备的 app 但语言只是你构建优质 app 所需的一部分 你必须把语言和强大的 用户界面框架搭配起来 下面由 Eliza 来给大家进一步说明 强大的 UI 框架可以提供抽象 让你更轻松地描述界面 填充数据 以及保持更新 它应该具有很好的扩展性 适用于不同的复杂环境 而且 它应该是为你的目标平台设计的 让你可以充分利用设备的能力 UI 框架应该助你一臂之力 使你的 app 感到亲切且直观 它应该让你可以轻松创建标准控制件 和本地交互匹配模式 并支持高级定制功能 它还需要有富有表现力的 API 让你可以快速建立你的想法的原型 并在一系列设备上看到结果 SwiftUI 就可以提供这一切 且不止于此 与 Swift 一样 SwiftUI 的设计旨在 提供开发 app 的最佳方式 它采用声明式语法 易于读写 你只需描述界面的样子 而不是如何构建界面
而这就是 SwiftUI 可发挥的空间 为每个平台提供智能默认值 SwiftUI 会自动保持界面的更新 确保界面随底层数据模型的改动而变化 因此你的 app 的 UI 永远不会陷入不一致的状态 SwiftUI 为你处理所有这些细节 这样你就可以把时间和精力专注在 构建你的 app 与众不同的地方 编写新的 UI 框架是一项巨大的工程 自从推出 SwiftUI 以来 我们持续扩大 SwiftUI 的 API 类型 且都是基于大家的反馈 今年 我们将让你在现有的各种 app 中 逐步采用 SwiftUI 变得更容易 同时我们还对它的性能和灵活性 带来可观的提升 首先是 app 导航 一直以来 使用 SwiftUI 即可轻松创建许多 app 中 常见的导航层次结构 SwiftUI 在今年将会扩展这方面的支持 推出全新的导航 API 新的导航 API 可以让你更容易地创建 最适合你 app 需求的导航风格 通过对 app 视图呈现的强大编程控制 你可以轻松保存或选择恢复 甚至替换导航栏的全部内容 这在处理重要行为时十分有用 如设置 app 的启动状态 管理尺寸类别间的过渡 以及对深度链接的响应 SwiftUI 的另一项巨大改进 是可以让你更好地控制 app 界面的布局 许多 app 的界面可以用 SwiftUI 的 水平或垂直元素堆栈模型来描述 虽然这个模型可以处理很多常见布局 但有时你需要更加灵活的工具 今年 我们将加入全新的 grid API 让你轻松设置多行与多列排列的网格布局 透过全新的自定义布局 API 将可让你的布局更上层楼 自定义布局 API 带来了灵活性 让你可以随心所欲设置你想要的布局 例如 你可以创建流动式布局 让视图像报纸内容一样排列 当需要更多空间时 将内容自动延伸至下一栏 或者你可以创建放射式布局 把视图做成圆环 就像手表表盘的数字一样 自定义布局 API 让你可以 轻松重复使用你的布局逻辑 使你的视图代码更简单 更易读 SwiftUI 还在不断发展 为你提供更多类型的界面元素 比如通过半屏表单来展示二级页面 并可以上下滑动 有助于在较小的屏幕快速获取信息 例如 SwiftUI 现在支持共享表单 让你的 app 可以轻松利用 用户设备上的所有共享扩展 全新的 Transferable 协议支持共享表单 并为传输 app 数据引入了一个安全类型的 API
为了让你更轻松地在现有 app 中 逐步采用 SwiftUI 我们还推出了一个可以托管 SwiftUI 视图的 特殊集合视图单元格 如果你在 UIKit app 中已有一个集合视图 那你现在就可以使用 SwiftUI 的声明式语法 编写自定义单元格 这些单元格与 UIKit 紧密集成 支持轻扫动作 单元格背景 以及 UICollectionView 的其他功能 今天 我们还要推出一个全新的框架 更好地补充 SwiftUI 来让你能够呈现更多的界面 下面请 Jo 给大家介绍 数据在当今的世界随处可见 数据可以帮助我们理解并做出决策 以及发现新的视角 一个精心设计、容易获取的数据可视化呈现 能够以清晰自然的方式 向用户传达复杂的信息 赋能于他们的日常生活 比如帮助显示他们健康的变化趋势 强调他们个人目标的进度 以及协助他们为未来做好准备 今天 我们要推出一个新的框架 帮助你的用户来解读 app 中的数据 这就是 Swift Charts Swift Charts 是一个可高度自定义的图表框架 它基于 SwiftUI 可以轻松创建精美的可视化图表 它使用与 SwiftUI 相同的声明式语法 可轻松读写传达视觉信息的代码 Swift Charts 让你可以自定义信息的呈现方式 最大程度地符合你 app 的需求 创建各种图表 从线图和柱状图 到更复杂的热力图和流线图 以及很多其他类型的图表
由于 Swift Charts 是在 SwiftUI 的基础上所建立 所以图表提供了非常好的辅助功能支持 例如绝佳的、开箱即用的旁白体验 并可轻松自定义 以 SwiftUI 为基础也意味着 你可以对图表进行动画处理 给 app 提供你想要的外观和感觉 当然 Swift Charts 支持我们所有的设备 回到我们的 Food Truck app 这里就是在全面重新设计过的 Xcode 预览区中 呈现美观的全新 Swift Charts 图表 同时我还用了新的多列 SwiftUI 表格视图 我来给大家展示一下 创建这个图表有多么容易 在我滚动页面时 你可以在源代码编辑器中 看到这个很棒的全新结构化标题 这让我可以很容易看到我正在编辑的地方
这里是图表的代码 这其实是一个堆叠的柱状图 但真的是看不出来差别 我们来给每种甜甜圈一个不同的颜色
如果我们把每种甜甜圈的条柱 并排放在一起 可能会更容易比较各种甜甜圈
我非常喜欢的是 进行这些大的改动 仅需几个简单的 modifier 我们还可以自定义样式 让这些条柱对应甜甜圈的颜色 我们甚至可以用另一个 modifier 给条柱添加注解
看起来很棒 预览现在默认是实时的 所以我可以立即与视图进行互动 我来更改一下排序 看看条柱精美的动画 而所有繁重的工作 都是由 Swift Charts 来完成的 我们来抓取更多数据 图和表都会自动随模型的变化更新 图甚至会重新计算 Y 轴 反映出新的总计值 让我再给大家看一张图 我在这里做了一个线图 我们把它添加到视图里 我直接跳到实施 Swift Charts 的线图有些很酷的选项 我们可以为每种甜甜圈添加符号 可以为线添加注解 甚至可以采用各种差值策略平滑曲线 我们这里用 catmullRom 最后 通过提供我自己的映射 覆盖图表比例样式 这样会使图表与 app 的配色方案更吻合 非常棒 重新设计的预览区使我比以往更容易看到 我的视图在不同环境中的样子 通过点击画布上的按钮 我可以看到深色和浅色模式下的视图 甚至可以看到所有的屏幕方向中的布局 一个额外的预览都不用添加 我们来放大看看横向模式 看起来我的 UI 有点问题 有几个控制按钮在屏幕之外 而且图表的长宽比也很别扭 我们来看看这个布局是在哪里描述的 这里这些视图在一个隐含的 VStack 里
今年 SwiftUI 中有些强大的全新 API 可以创建更多的灵活布局 这里我来用 ViewThatFits 这会根据可用空间 在垂直和水平堆栈之间切换
这样看起来好多了 现在把这个视图连接起来 从主屏幕导航到这里
我用的是 SwiftUI 全新的导航分屏浏览 操作起来非常方便 分屏浏览有一个侧边栏 可以追踪选择 它还有个 NavigationStack 其内容随着侧边栏选择的变化进而调整 我来跳到侧边栏 为我们的甜甜圈冠军视图 添加导航链接 然后 就可以在这个互动预览中试试看 我想在横向模式中看一下分屏浏览 那我就用新的画布设置 来旋转实时预览 很棒 我对它在 iPad 上的效果很满意 但我现在想把它也带到 Mac 上 而这只需点击几下即可做到 我想充分利用 Mac SDK 所以我在这里使用原生
因为我的 app 背后只有一个目标 我可以共用几乎所有的代码 而 SwiftUI 会让我的 app 在每个平台上看起来都很棒 我也可以轻松添加针对不同设备的功能 对 Mac app 我们来添加 一个 menuBarExtra 这就是你屏幕右上角那些 有用的小图标 比如 Wi-Fi 和聚焦 SwiftUI 为此提供了新的 API 我只需把它添加到我 app 的主体 现在我们来为 Mac 运行试试看
我们的甜甜圈冠军视图在 Mac 上 看起来很棒 这里就是那个 menuBarExtra 很方便 这就是对 Swift Charts 的简要介绍 以及 SwiftUI 和 Xcode 即将带来 部分增强功能的说明 现在交回给 Josh 我们正越来越多地使用 SwiftUI 并覆盖了我们的各个 app 和系统界面 例如 iOS 新的锁定屏幕小组件 就是由 SwiftUI 全新设计的 而新的 Font Book app 也是用它 完全重写的 还有看起来很现代、超前的 全新 macOS 系统设置 app 也是用它构建的 Swift 和 SwiftUI 从一开始的设计目的 就是用统一的原生语言和 API 适用于 Apple 的各个平台 只需学习一次 即可用在所有地方 无论你的愿景是在 Apple Watch 上 提供一目了然的快速信息访问 为 MacBook Pro 和 iPad 提供生产力工具 在 iPhone 上提供新的体验 还是为 Apple TV 提供新的放松方式 Swift、SwiftUI 和 Xcode 提供了新一代的整合开发平台 帮你开发的 app 适用于我们所有的产品 如果你先前已开发的 app 同样也可以轻松地逐步采用这些新技术 如果你是我们平台的新手 或者要开始开发新的 app 最好的构建方式就是直接使用 Swift 和 SwiftUI 当然 这只是个开始 我们也在不断改进平台的用户体验 为你们提供更多与用户互动的方式 下面请 Sebastien 给你们来详细介绍
开发 app 就是将各种想法 代码和 API 转变为用户体验 而最好的 app 就是能满足用户当下需求的 app 我们创建了各种方式 让用户体验不仅限于你的 app 里 更整合到不同 Apple 设备的系统体验中 这段旅程从各种扩展方式开始 以及与共享表单的整合 还有自定义键盘 最近 还增加了让你的 app 使用小组件 在主屏幕显示关键信息的能力 今年将有众多新的方式 将你的 app 与我们各平台的系统体验相整合 这要从锁定屏幕开始 锁定屏幕得到了有史以来最大的更新 我们重新设计了锁定屏幕的外观和运作方式 为你的创意和各种 app 提供另一个与用户互动的地方 让 Robert 来给大家介绍详情
重新设计锁定屏幕的目的 是让它更加个性化、更美观 同时提高日常实用性 在这个过程中 我们知道我们需要 把小组件的强大功能 带到全新的锁定屏幕上 小组件带来了出色的方式 突出你 app 里的关键信息 让用户一目了然 它们让用户能够直接从主屏幕轻松获取 丰富、及时的信息 每当举起 iPhone 最先看到的就是锁定屏幕 这里一直是查看日期时间 了解重要信息的地方 在思考如何以最佳的形式 在这里显示更多信息时 我们不用绞尽脑汁去寻找设计灵感 Apple Watch 上的复杂功能已经提供了 一目了然、相关 最即时的信息 并在用户需要时美观呈现这些内容 这种设计语言自然地延伸到 iOS 恰如其分地出现在新的锁定屏幕上 因此 利用 WidgetKit 我们将一些相同的设计 带来锁定屏幕上的小组件 包括 Circular 可以展示一张小图、仪表或几个字符的文字 Circular 小组件非常适合展示出 你今天活动量是否已经足够 还是需要出去跑跑步 Rectangular 提供一个大画布 可显示像天气预报这样的内容 Inline 是一种强大的展示信息的方式 可在 iPhone 的时钟上方 显示少量文本和 SF 符号 旁边是系统提供的日期字符串 如 6 日星期一 对了 所有这些小组件都可在 iOS 和 watchOS 上使用 因为从 watchOS 9 开始 复杂功能也由 WidgetKit 提供支持 这是首次可以在两个平台上 使用相同的代码生成一目了然的数据 WidgetKit 为你自动管理平台差异 默认使用适合的系统字体 并为锁定屏幕上的小组件上色 提供最大的可读性 具体如何使用 WidgetKit 以相同的代码 为 iPhone 锁定屏幕 和 Apple Watch 复杂功能创建小组件 将由 Michael 为大家介绍
无论是在 iPhone 锁定屏幕上创建小组件 还是打造 Apple Watch 上的复杂功能 都可以用 WidgetKit 轻松实现 如果你已经做了主屏幕小组件 那你就已经完成了大部分工作 包括数据和时间线的更新方式 在我们的 Food Truck app 中 我们已经有了 systemSmall 小组件 用户可以添加到主屏幕上 查看他们今天已经完成了多少订单配额 这类信息就非常适合显示在锁定屏幕 或是手表表盘的复杂功能中 我们先来建立 Circular 系列
首先要在 Supported Families 阵列中 声明对它的支持
你可以看到我们在这里用了一些平台条件 这是因为我们希望这个小组件能继续 利用 systemSmall 支持 macOS 和 iOS 但 watchOS 无法使用这个系列 于是我们增加了一个枚举值来定义这个视图
我们使用仪表来显示 从 0 到每日配额的订单量 这样用户就能快速并且一目了然地看到进展 我们在中间以文本形式显示当前订单量 并显示一个甜甜圈符号 好了 我们在 Xcode Previews 中看看效果
很棒 在锁定屏幕上看起来很自然 如果想一目了然地显示更多细节 我们还可以添加对 Rectangular 系列的支持
我们建一个 VStack 来实现这个视图 首先给所展示的数据一个标题 还有同样的甜甜圈符号 将字体设置为标题样式 这样在两个平台上都有很美观的效果 然后用 widgetAccentable modifier 确保它着重显示 由于 Rectangular 系列提供了更多空间 我们可以显示一个很酷的 自定义分段式仪表 同时让仪表标签显示 当前订单数和每日配额 回到画布 我们也可以在预览中看到 Rectangular 小组件 我真的非常喜欢这个仪表 现在我们来看看这个小组件 在手表表盘以 Circular 复杂功能显示是什么效果
相当好 所有信息都显示了 但对复杂功能来说 我们还需考虑 全彩渲染模式 这是 Xcode Previews 中的默认模式 我们来调整一下 给每个仪表添加一点色调
再给 Rectangular 标题添加一个前景色
要在全彩中强调显示 我们可以用环境属性检查渲染模式 并在 Circular 和 Rectangular 视图中 用甜甜圈表情符号替换甜甜圈符号 看起来很棒 利用预览中的新变体 UI 完全无需创建任何代码 我们可以改变预览颜色
甚至同时预览多个颜色 由于我们使用了默认的间距 系统字体样式 并适应了渲染模式 同样的视图在锁定屏幕和手表表盘上 看起来都相当自然 如刚所示都是使用同样的代码 就可以轻松制作 iOS 16 全新锁定屏幕的小组件 以及 watchOS 9 的复杂功能 但这并不是唯一一种把 WidgetKit 的能力 带到锁定屏幕的方式 下面请 Matt 给大家介绍 利用 WidgetKit 你可以让用户获取一目了然的信息 但他们有时需要实时更新的信息 或是与他们当前关心的活动或事件有关的信息 这时该怎么做呢 为此 我们正在探索一个新的功能 称为实时活动 实时活动让你更容易实时获取 与正在发生的事情相关的信息 直接显示在锁定屏幕上 比如比赛的最新得分 叫车进程或体能训练进度 直接显示在锁定屏幕上并且实时更新 就像小组件一样 你可以用 WidgetKit 创建实时活动 差别在于实时活动所呈现的信息和状态 是实时更新的 由于它们是用 SwiftUI 构建的 你甚至可以将状态间的更新做成动画 这些更新确保你的实时活动 在用户浏览时显示最新的信息 实时活动将于今年晚些时候 在 iOS 16 更新中开始提供 这就是全新锁定屏幕的最新进展 这些超棒的更新 可以让你在用户最需要的时候 为他们提供一目了然的信息 接下来 我们来谈一谈增强协作体验的全新方式 由 Pierre 来给大家介绍 协作同步是非常重要的 无论是在 iOS、iPadOS 还是 macOS 上 这在很大程度上是得益于大量丰富的 app 很多正是由你们来开发的 来支持所有远距离协作的团队们 工作上的协作 例如 Airtable 中的产品路线图 还有娱乐上的协作 例如在 Redfin 上寻找你的梦想家园 无论是工作还是娱乐 协作通常从对话开始 通过全新的 Messages Collaboration API 你可以把 app 的现有协作体验 融入信息 app 和 FaceTime 通话 当用户在你的 app 中分享内容链接时 这个 API 可以让你更轻松地 将连接标记为协作性的 以实现无缝的体验 我们提供你所需的标识符 这样你可以在接收方轻点链接加入时 立即提供访问权 当然 这都是在不影响隐私的前提下进行的 信息身份和 app 身份将保持私密 不会被分享 最棒的是 你可以用你的 app 很可能已经在用的 现有技术来实现这一点 只需一个对象 用户就可以发起协作 有两种他们已经很熟悉的方式来进行操作 一是共享表单 我们已经提供更新 将协作放在非常重要的位置 二是通过拖放 分享你想协作的内容 仅需直接将内容拖到信息 app 的对话中 一旦协作开始 你甚至可以把内容更新通知 直接发布在信息 app 的对话中 只需几行代码 用户就可以回到 你的 app 中进行协作 仅需在信息 app 中轻点一下 利用协作弹窗 用户可以从你的 app 里 直接回到信息 app 或 FaceTime 通话中 利用 Messages Collaboration API 你的 app 可以深度整合到信息 app 和 FaceTime 通话的架构中 我们给你的用户提供强大的通信工具 这样你就可以专注于你的 app 提供强大的协作工具 这将提升 iOS、iPadOS 和 macOS 上的协作功能 创造一致的体验 它深深扎根于协作者之间的联系 无论是用于工作还是娱乐 接下来 Ari 将给大家介绍 一个新的框架 App Intents 我非常高兴可以给各位介绍 App Intents 框架 它把你的 app 的功能开放给系统 这样用户就可以通过 Siri 和快捷指令 自动使用这些功能 人们喜欢在使用 app 时使用快捷指令 快捷指令让用户可以快速完成任务 仅需询问 Siri 或快速轻点主屏幕上的快捷指令 让我们惊叹的是用户组合使用 app 的能力 用自定义快捷指令 把它们组合成新的功能 目前 用户必须先手动添加快捷指令 之后才能使用它们 我们在 iOS 16 中将通过新的 App Intents 框架 把这个过程自动化
App Intents 与快捷指令一起 形成 app 快捷指令 供用户直接通过 Siri 使用 无需预先设置 可以说 “嘿 Siri 用 Roomba 打扫厨房” 而且不只是 Siri app 快捷指令让你的用户 可以在整个系统中使用你的 app 的功能 像是在聚焦中 当用户搜索你的 app 时 你的快捷指令也会显示出来 并且你的快捷指令会被 直接推荐在 app 推荐下面 无需采用任何额外 API 如 donations 你的快捷指令还会立即出现在 快捷指令 app 中 用户可以轻点运行 App Intents 是我们在 iOS 10 中引入的 SiriKit Intents 框架的下一步 如果你用各种 intent 来整合小组件或是 domain 比如媒体或信息 你应该继续使用 SiriKit Intents 框架 但对为 Siri 和快捷指令 构建自定义 intent 的开发者 你应该升级至 App Intents 你可以在 Xcode 中轻松 升级到 App Intents 仅需点击 intent 定 义文件中的 Convert 按钮 Xcode 会生成对等的 App Intents 源代码 然后你用你的 intent 处理代码来填补空白 用 App Intents 进行开发真的非常容易 因为它是为 Swift 特意设计的 所以需要的代码要少得多 你所写的 Swift 代码 就是唯一的数据源 也没有需要同步保留 额外的 intent 定义文件 或代码生成 并且这些代码很容易添加到你的项目中 你不需要重新设计你的代码库 哪怕你有 Objective-C 代码 你仍然可以在 App Intents 中使用它们 只要用 Swift 代码封装一下 一个 app intent 表示用户在你的 app 中 可以做的事情 并且使从你的 app 外完成该操作成为可能 你可以定义 intent 并添加 app 快捷指令 仅需几行代码 我们来一起试一试 回到 Food Truck app 我这里有个很棒的图表视图 可以让我看到不同时间段内 最畅销的五种甜甜圈 比如今天或本周 我想把它显示给 Siri 和快捷指令 这样用户就可以飞快地调出它 首先 在 Xcode 中 我进入 一个新的 Swift 文件 导入 App Intents 和 SwiftUI 框架
然后给这个 intent 下定义 要通过定义一个符合 AppIntent 协议的结构 我来给它加一个 title 再添加一个 parameter 来定义具体哪个时间段的趋势 它使用的是已经在我的代码库中 定义的时间框架枚举 我需要扩展它 以符合 AppEnum 协议 这样我们就可以为每个枚举情况 提取人类可读的名称 如 “今天” 和 “本周” 接下来 在 intent 这里 加上 perform 方法 这里 返回的是一个包含 SwiftUI 视图的结果 我还可以加入一个对话或输出值 我希望用户可以自动使用这个 intent 而不用设置 所以我要定义一个 app 快捷指令
这包括用户可以对 Siri 说的短语 好调用这个 intent 这个短语必须包括 app 的名称作为变量 我还包括了时间段参数 所以用户可以说 “Food Truck 今日趋势” 或 “Food Truck 本周趋势” 我需要做的最后一件事 就是让用户可以发现这个快捷指令 用户需要在某个时候看到这个短语 以便知道他们可以对 Siri 说什么 所以我就切换到前五甜甜圈视图文件 就是我们刚刚看的那个 我在这里添加一个 SiriTip
现在我就可以构建并运行这个 app 然后在我的手机上试试看 我们来试一试
我可以看到快捷指令出现在了快捷指令 app 中 每个参数值都有变量 我可以轻点运行一个 也可通过说那句短语 从 Siri 运行 “Food Truck 今日趋势”
我还可以说 “Food Truck 本周趋势”
当用户进到 app 的前五视图时 他们会看到我们在底部添加的这个提示 从而了解对 Siri 说什么可以使用该功能 最后 用户在聚焦中搜索该 app 时 可以访问这些功能 就像这样
非常有用 App Intents 让你前所未有地轻松打造 各种 app 功能 整合于系统体验中 并跨越各个平台 下面 Ricky 将给大家带来一些 关于认证技术的重大进展 从我们记事开始 我们就一直在创建和使用密码 但密码有着严重的问题 如网络钓鱼、多账号使用同一密码、网站泄露 好消息是 我们可以携起手来解决这一问题 现在 我们用通行密钥就可以了 通行密钥将简化你的认证流程 解决密码的首要安全问题 通行密钥的设计理念让它无比易用 通行密钥复用了之前的自动填充信息界面 并使用面容 ID 和触控 ID 进行生物识别验证 这些元素创造了从密码的无缝过渡 同时大大提升了安全性 让我们来看看通行密钥的实际应用 用通行密钥设置账户的话 我就不需要创建密码了 我在这里输入用户名 并将通行密钥保存到我的 iCloud 钥匙串中 这个通行密钥就安全同步到 我所有其他 Apple 设备上了 重新登录是一件轻而易举的事 面容 ID 验证 就搞定 通行密钥建立在开放的行业标准上 且各个平台都在持续采用 我可以用我刚刚在 iPhone 上创建的通行密钥 在我朋友的 PC 上登录 Food Truck 网站 在网站上 输入我的用户名 点击提交 选择用手机登陆 扫描二维码 让 PC 和 iPhone 建立安全连接 登录成功 在我自己 Mac 的 Safari 浏览器上 登录更加简单 我的通行密钥已经在这里了 得益于 iCloud 钥匙串 所以我可以直接从网站的用户名栏登录 将通行密钥整合到现有登录流程中非常容易 例如 这个网站的用户名栏允许我用通行密钥登录 也可用密码登录 如果我输入一个有密码的账号的用户名 我也可以快速登录 使用通行密钥 出力的是设备 而且每次都是安全的 创建通行密钥时 设备会生成一个独特密钥 专用于创建它的网站或 app 并且这个密钥会受到生物识别的保护 不可能有弱通行密钥 这些密钥不会被遗忘、无法重新使用 或者被猜出来 通行密钥的基础是公钥加密技术 这让服务器端的凭证泄露成为历史 不同于之前 在服务器上存储加盐哈希密码 存在泄漏和被破解的风险 现在只需要将对应的公钥保存在上面 公钥被设计为真正公开的 对黑客完全没有价值 这极大地降低了你作为网站所有者的风险 还有非常重要的一点 有了通行密钥 我们今天所知的凭证钓鱼将不复存在 消除了用户面临的头号安全漏洞 通行密钥与设置它们的网站或 app 有内在联系 因此 用户永远不会被骗在错误的网站上 使用他们的通行密钥 而且 与密码不同的是 将通行密钥输入或复制到 看上去非常逼真的假网站是不可能的 甚至不可能将任何信息泄露给偷看到你密码的人 把这一切放在一起时 我们看到的就是 账户安全的崭新时代 在你的 app 和网站里支持 通行密钥仅需几步 首先 教你的帐户后端存储公钥 并发出身份验证挑战 然后 在网站和 app 中 给用户提供通行密钥 并采用 API 来创建新的通行密钥以及用它登录 通行密钥基于 Web 认证标准 这个标准是跨行业的平台供应商和服务所有者 共同努力的结果 这标准本身非常成熟 并且有详细的对应文档 通行密钥非常适合它 所有这一切已经准备就绪 你现在就可开始构建 新一代的安全保护 流畅的用户体验 并能在转换过渡期与密码顺畅地使用 交回给你 Sebastien 大家刚刚看到的是一些最新的方式 能让你的 app 整合到 跨我们所有平台的系统体验中 除了这些可以整合的特性 还有大量新的 API 和框架 跨我们所有的平台 能在今年为你和你的 app 带来更多的可能性 我想先给大家介绍一些 然后再更深入讲解另外几个 我们先来看 iPadOS 有了 iPadOS 16 你可以打造出 iPad 上各类前所未有的强大 app 并且带来和桌面级 app 一致的体验 例如流畅的查找和替换体验用于 UI 文本视图 让你打造的 app 可以直接调用 以及对导航栏、工具栏 文档菜单的更新 它们会让你的用户能更轻松地管理文档 以及自定义他们的体验 为了让 iPad 更好地与其他硬件搭配使用 我们为 iPad 推出了 DriverKit 解锁 M1 芯片的惊人性能 它与目前在 Mac 上可用的 API 相同 让你可以轻松地向更多用户提供对 USB、音频和 PCI 设备的支持
此外 watchOS 也正在为各类 app 创造新的机会 通过与各类系统服务 更深层度的整合 watchOS 9 的 CallKit 框架 包括一个新的 VoIP 背景模式 让 app 可以直接从 Apple Watch 上 发起语音通话 带来熟悉的用户体验 正如 FaceTime 音频通话和打电话那样 通过蓝牙连接的医疗设备获得了 更强大的连接能力和数据传输 能在检测到危急情况时及时发出提示
tvOS 16 为你提供了新的方法 来创造连接性的体验 让你把 Apple TV 上的 app 与附近设备上的 iPhone、iPad 或 Apple Watch app 相连 这样 锻炼可以使用 Apple Watch 的运动数据 或者你可以把 iPhone 或 iPad 用作回合制游戏的自定义手柄 tvOS 负责管理设备的发现和连接 所以你的 app 甚至无需在另一部设备上运行 事实上 如果你的 app 还没被安装 用户会被自动提示从 App Store下载它 对于手机和 iPad 还有提供给广告商的新工具 我们知道 有效的广告对大家的很多业务很重要 这就是为什么我们创建了 SKAdNetwork 这是一个帮助广告网络和广告商的 API 可在不追踪用户的前提下衡量广告活动的指标 我们很高兴看到许多第三方广告网络都采用了它 我们听到了广告网络和开发者的反馈 并在今年对 SKAdNetwork 进行了一些改进 回应了许多强烈要求的功能 为大家提供极大的灵活性 同时不影响隐私
在 iPhone 和 iPad 上 有些很酷的新功能 基于增强现实和激光雷达扫描仪 用到了 ScanKit 与 RoomPlan 这些 API 让你的 app 以 USD 和 USDZ 格式创建信息丰富的 3D 参数化房间模型 你可以创建各种工作流和体验 从建筑和设计 到零售、酒店行业 这些模型包括了家具分类 包括沙发、橱柜、电视等类别 没错 甚至还有厨房水槽 去年 我们推出了专注模式 适用于 iPhone、iPad Mac 和 Apple Watch 让你的 app 根据用户的专注模式去管理通知 今年 我们将通过专注模式过滤条件 进一步加强这项功能 专注模式过滤条件建立在 App Intents 之上 让你根据用户当前的专注模式调整 app 的内容 例如 app 可以创建专注模式过滤条件 在用户设置为工作模式时 仅显示工作账号 而这些例子仅是冰山一角 在各个层面都有新的工具和 API 为你提供所需要的功能 让你的 app 更进一步 以及创造全新的 app 和体验 下面 我们来深入讲解一下 首先就是 Metal 这项技术将各种体验带入全新境界 更多详情 请 Sarah 来介绍 ♪ ♪
Metal 是个强大的图形处理和计算 API 帮助你打造出令人惊叹的各类游戏和专业级 app 覆盖 Apple 的各个平台 Metal 让你可以充分利用 Apple 打造的 带来突破性能的图形处理器和统一内存系统 覆盖搭载了 Apple 芯片的最新 iPhone、iPad、Mac 产品线 今年 我们将推出 Metal 3 带来强大的新功能 助你以更高的帧率渲染沉浸式画面 并将计算性能推向新高 例如 机器学习框架 Pytorch 将迎来巨大的性能提升 它现在使用新的 Metal 后端 使用图形处理器来进行机器学习训练 当然最受关注的领域就是游戏 首先是游戏加载 这是游戏体验的一个关键因素 会影响启动时间和新关卡加载 现在的游戏带来细节丰富的游戏体验 基于高画质的素材 将这些素材快速地从硬盘加载到图形处理器 是件有挑战的事 通常 游戏会在加载画面时进行素材加载 一种加快游戏启动的方式 是加载并绘制一个较低质量的版本 直到高质量的视觉画面加载完毕 这并不是理想的游戏体验 因为用户会更长时间看到低画质 Metal 3 带来了快速资源加载 基于 Metal IO API 利用 Apple 图形处理器的统一内存架构 减少加载开销 确保每台 Apple 芯片 Mac 所配的高速 SSD 存储 在队列中有足够的请求 从而最大限度地提高通量 这个新的 API 会提供更快更一致的性能 从而把更多的时间留给理想画质的绘制
除了将资源从硬盘加载到内存以外 着色器编译也会影响游戏加载 着色器总是需要根据用户的 独特硬件配置进行编译 由于 PC 硬件种类繁多 这通常需要在运行时完成 这种游戏中的编译会影响玩家体验 导致掉帧、帧率下降、加载时间延长 相比之下 Apple 芯片和 Metal 3 的设计相辅相成 支持所有 Apple 设备 现在 有了离线着色器编译 你可以在项目构建时 生成图形处理器着色器二进制文件 让你能够消除游戏中的着色器编译 减少加载时间 提升渲染性能 游戏的另一个重点是提供丰富 充满细节的素材 提高游戏图形视觉保真度的一个方法是 生成更复杂的几何网格 之前是在中央处理器上进行界面评估 生成几何图形 再提交给图形处理器进行渲染 挑战在于 这可能会带来延迟 并占用不可预测的内存空间 Metal 3 引入了新的 Mesh Shading API 让你能够从一个渲染通道中 精确控制优化的几何处理管线 对象着色器决定生成多少网格 网格着色器生成实际的几何图像 然后直接发给光栅化渲染器 避免了多次内存访问 提高了性能 玩家也希望以最高的帧率 看到这些令人惊叹的视觉效果 但以超高分辨率渲染高级图像 可能会耗费宝贵的毫秒 MetalFX 上采样功能帮你以每帧更短的时间 来渲染沉浸式画面 它是这样运作的 以前 你会以原始分辨率渲染全帧 但图形处理器的渲染时间可能无法达到目标帧时间 现在 你能以较低的分辨率 渲染同样的复杂场景 从而满足目标帧时间 然后利用 MetalFX 框架 执行时间抗锯齿 并上采样至目标分辨率 有了 Apple 芯片和 Metal 3 优化的功能 游戏将在 Mac 上前所未有地大放异彩 游戏开发者也表示赞同 许多顶尖的游戏工作室正在着手 将他们的游戏带到 Mac 上 比如 Grid Legends 利用 Apple 芯片 助你全速前进 而 Resident Evil Village 使用 MetalFX 上采样等功能 以最高分辨率提供美到惊心动魄的画面 还有 No Man's Sky 利用 Metal 3 的优势 在 Mac 和 iPad 上探索丰富、广阔的世界 Metal 3 令人难以置信 它将提升你的 app 的性能 以及提供惊艳的游戏体验 现在 我们来看看 MapKit 的发展方向 请 Kathy 给大家介绍 无论你是要导航前往你最喜欢的餐厅 计划下一个假期 还是只是在地图上查看 你最喜欢的美食车停在哪里 我们都无比依赖我们的设备 帮我们探索周边的世界 MapKit 是帮助用户探索和导航的好方法 它提供了丰富而灵活的地图和位置服务 由 Apple 地图驱动 开发者可免费使用 利用 MapKit 你可以在你的 app 中 显示地图或卫星图像 找到并调出兴趣点 添加注释和覆盖物 获取路线等等 MapKit 由我们的全新地图提供支持 经过 Apple 彻底重新设计 它提供了更好的细节和准确性 并能为你的 app 带来有用的地图和位置服务 在 iOS 16 中 我们将在新地图的基础上 推出有史以来对 MapKit 最大的更新 首先是向所有开发者提供 3D City Experience 你的 app 用户将能看到令人难以置信的细节 包括 3D 高度信息、转弯车道 人行横道、自行车道等 还有惊人的手工打造的 3D 地标 如金门大桥或渡轮大厦 地图的新增细节让你可以提供 前所未有的背景和精确度 例如 你可以在人行横道和自行车道起始点间 显示一个兴趣点 没有其他数字地图能让你做到这一点 而我们可以让你非常轻松地实现它 为了给大家展示 我们来创造一个体验 让用户利用新地图的细节 轻松找到他们最喜欢的美食车停在哪里 像这样的地图视图会在可用时 自动获得 3D City Experience 只需将部署目标设置为 iOS 16 即可 接下来 我可以用非常详细的地图 来显示美食车的确切位置 MapKit 拥有强大的控件 让我们在 3D 空间中定位相机 以创建精确的地图视图 这里 我可以选择我们希望被放大的距离 通过将相机的中心坐标距离设置为 600 米即可 通过调整俯仰和朝向 倾斜相机查看 3D 视图 你可以看到令人惊叹的有用细节 如转弯车道 人行横道 甚至还有树木 默认情况下 高度信息将被压平 为了帮助用户了解他们将遇到的地形 我可以用 preferredConfiguration 将 elevationStyle 设置为 ‘realistic’ 以包含 3D 高度信息
从 MapKit 的路线规划 API 中 添加注释或路线源时 MapKit 会自动处理高度信息 并会通过将其置于 3D 地形之上 调整注释或路线 通过添加慢速平移 为相机朝向进行动画处理 可以让地图视图变得生动 当用户切换到深色模式时 地图也会与 UI 的其他部分一同调整 我们非常高兴能通过 iOS 16 向开发者提供这项沉浸式的体验 此外 我们还将另一个很受欢迎的 Apple 地图功能带到了 MapKit 那就是 四处看看 这是一种从视平线角度探索世界的好方法 提供了高分辨率的 3D 图像和流畅的动画 用户只需轻点就可在街道上移动
我可以在地图下面添加一个静态的 四处看看预览 仅需放入一个 View Controller 并指定 MapItem 四处看看视图会自动插入正确的位置 用户轻点预览时 我可以选择提供 全屏的四处看看视图 用户可以看到地址 图像采集日期 还能通过轻点自由移动 更好地了解周边环境 还有一项新的、呼声很高的功能 将在 iOS 16 中登陆 MapKit Apple Maps Server API Maps Server API 是 REST 接口 支持 MapKit 最常用功能中的四项 地理编码 可将经纬度转换为地址 逆地理编码 实现的是相反的功能 将地址转换为 GPS 坐标 搜索 以及到达时间 我们新的 Maps Server API 能让你自己的后端服务更丰富 性能更强 当然 MapKit 建立在与 Apple 地图相同的 隐私保护基础上 不会将用户的数据与他们的身份关联起来 也不会保留用户去过的地方的历史 这就是对 iOS 16 中 MapKit 新功能的简单介绍 现在轮到介绍天气了 至少是如何将天气建入你的 app 交给 Novall 我们今天宣布了要把天气 app 带到 iPad 和 Mac 上 并推出强大的新功能 包括恶劣天气通知、丰富的细节视图 以及未来十天的每小时温度和降水预报 等各种各样的体验 跨各个 Apple 设备和平台 这些体验也将因我们提供的天气数据而优化提升 无论是向 Siri 询问今天的天气预报 还是绕过水灾区域重新规划导航路线 所有这一切都内置于我们的 Apple 天气服务中 Apple 天气提供了世界级的全球天气预报 利用高分辨率气象模型 结合机器学习和预测算法 Apple 天气提供当前天气 10 天内的每小时预报、每日预报 以及历史天气 方便你评估数据趋势 在一些国家和地区还提供 恶劣天气警报和每分钟降水信息 预报功能包括未来 10 天的每小时温度 降水、紫外线指数预报 以及更多信息 所有这些数据都可通过 WeatherKit 获取到 WeatherKit 是原生的 Swift API 适用于所有 Apple 平台 并且是一个可以从任何地方使用的 REST API 这些 API 可以提供准确、超本地化的天气预报 为你的用户提供信息 帮助他们保持安全 做好准备 我来通过一个简短的演示向你介绍 通过 WeatherKit 很棒的 Swift API 获取天气信息多么容易 我们再回到 Food Truck app 为了确保我的顾客不被雨淋 我设置的 app 能推荐一个天空晴朗的停车点 我来展示一下我是如何获得天气信息的 我这里有一份安全停车点的清单 我已在 Xcode 中添加了 WeatherKit 功能 仅需几行代码即可 利用 Swift 并发功能 请求天气信息非常简单 我们调用 weather(for:) on WeatherService 并传入位置 然后我就可以获得我的 app 所需的相关数据 如天气状况 降水、云层覆盖 现在我有了每个停车位所需的数据 在我运行 app 时 我的自定义视图就已经更新为 推荐一个天空晴朗的位置
你可以通过各种方式使用天气数据 让你的 app 提供更好的体验 你可能会用天气预报帮你管理库存 预测冰淇淋馅甜甜圈在大热天会很受欢迎 所以你该多备一些冰淇淋 为我们的美食车获取天气数据仅需这样简单的操作 大家可以用 WeatherKit 做的事还有更多 与 Apple 对隐私保护的承诺一致 位置信息仅用于提供天气预报 不会与任何个人身份信息相关联 并且永不分享或出售 保护隐私是我们共同的责任 通过 WeatherKit 你可以获得准确的天气数据 同时保护用户隐私 因为我们想让大家很容易就能 开始使用 WeatherKit 所以我们将每月 50 万次 weather(for:location) API 调用 包含在你们的 Apple Developer Program 订阅中 需求量更大的开发者 将可购买额外的服务级别 今年秋天起即可从开发者 app 中购买 这就是 WeatherKit 由 Apple 天气服务提供的准确、超本地化的天气预报 我们将从 Beta 测试版开始 现在就可以在所有平台上使用 你可以有很多有创意的方法 将 WeatherKit 用在你的 app 中 现在交给 Ryan 来给我们介绍 你的 app 可以通过实况文本看到什么 我们的用户非常喜欢实况文本 我们也听到你们中的很多人 都想把它加入到你们的 app 中 因此 今年我们将通过两个新的 API 扩展 VisionKit 让你们可以做到这一点
实况文本 API 解锁了分析图像内容的能力 让用户可以与照片和暂停视频帧中的 文字和二维码互动 并提供快速操作 这样你的用户仅需轻点 即可根据相关数据完成操作 它非常适合任何显示视觉媒体的 app 如 Apollo for Reddit 或 Vimeo 而 Data Scanner API 则解锁了 分析实时摄像头画面的能力 它极大地简化了扫描文本和条码的流程 你所需要做的就是添加覆盖物或自定义控件 使实况摄像头体验符合你 app 的需求 这特别适合依赖二维码的消费类 app 或者是企业 app 如仓库后区库存管理 取货和包装送货服务 以及自助结账机 实况文本 API 和数据扫描 API 支持自动检测 9 种语言 包括今年新增的日文和韩文
这些 VisionKit API 将多年的计算机视觉创新 带给你的 app 且仅需几行代码 下面交给 Jenny 来为各位展示 给大家快速展示一下 回到我们超棒的快闪 Food Truck app 我们正在做一个促销活动 如果用户在社交频道发布一张照片 手持带有 #freedonut 标签 和他们在 app 上的地址的牌子 我们就会把车开到他们的地址 赠送一个免费甜甜圈 我们来看看我们甜甜圈的社交频道 我们想把实况文本功能添加到图片上 这样司机就可以提取文本 获得送餐地址 这就到新的实况文本 API 派上用场的时候了 我可以很容易地在我的视图上面 添加一个 ImageInteraction 这将会添加一个实况文本按钮 并且支持快速操作 实况文本按钮通常位于右下角 但我的 app 中已经有个爱心按钮了 所以我可以使用自定义嵌入物调整它的位置 我还可以设置按钮的配置 自定义按钮风格 让它与我的 app 更匹配 现在我已经添加好了 我可以轻点实况文本按钮 选择文本 或者用快速操作轻松抓取地址
我很喜欢的是用户不用学习新的交互模式 因为它提供了与实况文本相同的易用性 UI 都是一致且熟悉的 与操作系统充分整合 但我还是可以调整位置 哪怕我已经有了自己的自定义 UI 当然 就像任何优秀送餐 app 一样 我们也希望为顾客提供最好的服务 确保他们得到正确的甜甜圈 所以 我们通过二维码追踪甜甜圈订单 使用新的数据扫描 API 我可以轻松添加该功能 让它成为与顾客互动的第一步 现在这个按钮什么都做不了 但我可以很容易地实例化一个 新的数据扫描对象 它可以寻找文本、二维码或条码 然后我可以将其导入我的 app 仅需几行代码 我就可以调出相机 指明我想要二维码 然后开始扫描 当司机轻点二维码时 我想显示出扫描成功 我可以在 Xcode 中添加委托处理程序
并在轻点时向用户显示扫描成功的提示 这样我就可以开始处理订单了 现在我运行 app 时 会调出带有相机视图的视图控制器 我可以看到引导信息 以及高亮显示二维码的标线视图 我轻点二维码时 就可以看到扫描成功了 甜甜圈订单已确认 就这样简单 我的 #freedonut 已经上路了 利用 VisionKit 全新的实况文本 API 和数据扫描 API 你可以轻松将这些强大的视觉功能 带给你的 app 好 现在交回给 Susan 对 app 开发来说 这真是个激动人心的时代 Xcode Cloud 现在已经准备就绪 帮你更快地构建更优秀的 app Swift 和 SwiftUI 更便于你讲奇思妙想融入 app 中 并且适用于 Apple 的各个平台 还有很酷的新方法 帮你把你的想法 并和系统体验相整合 锁定屏幕小组件和实时活动 把你的 app 带到锁定屏幕上 Messages Collaboration 让你的用户 可以无比轻松地联络和协作 而 App Intents 可以帮你把 app 和 Siri 整合在一起 还有各种全新的 API 以及对现有 API 的重大更新 如 WeatherKit、MapKit 实况文本和 Metal 而这还不是全部 今年的 WWDC 又是一大盛事 175 场讲座 数百个实验室以及数字聊天室活动 贯穿整个星期 我们迫不及待在这周与大家见面 更重要的是 这周的主角是你们 我们迫不及待地想看到你们的下一个大作 谢谢大家! ♪ ♪
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。