大多数浏览器和
Developer App 均支持流媒体播放。
-
创建独立的 Apple Watch App
watchOS 6 带来了全新的 watchOS 体验,不仅可运行完全独立的 app 和专为 Apple Watch 打造的 app,还将 App Store 引入到 Apple Watch 中。探索如何利用如今在 watchOS 上提供的众多 iOS 框架和技术,打造完全独立的 Apple Watch 体验。
资源
相关视频
WWDC19
-
下载
(如何创建独立的 Watch App)
大家好 我是Neil Desai 是一名watchOS框架工程师 今天很开心向大家介绍 如何创建独立的Watch app
现在 越来越多的人出门 只带Apple Watch 用户喜欢Apple Watch 给他们带来的快速互动和自由 不管是带着Watch去运动 出差 或者就是接一个电话
Apple Watch都能帮你 和你最在意的人 信息 或者是app相连
现在我们享受着 Apple Watch带来的自由 用户将它们的iPhone当做备胎
所以我们想让 我们的Watch app 也达到用户对 Apple Watch的期望 为此 我们引入了一个全新的概念 叫做独立Watch app 所以现在你的iPhone app 也会成为备胎 (独立WATCH APP)
许多app现在或多或少 已经是独立的了 Outcast就是一款 很好的播客app 我从手腕上就可以直接控制整个体验 CARROT天气是 另一款很好的例子 我经常用它来查看天气 我仅在Apple Watch上用 我出国旅游时也经常会用 Elk进行货币兑换 但是 这些app 都有iPhone版本
现在既然我们说 iPhone app是备胎 那么史上第一次 你可开发为Watch 量身定做app而不用做iOS版本
谢谢
为了让你的app独立起来 我来为你们介绍 今年针对Watch app 推出的新功能 比如直接向设备发送推送通知 以及使登录更加容易 还有许多其他的功能 但是首先我想谈谈 到底怎么安装这些app
现在 在Watch iOS 5中 Watch app是 嵌入到iOS app中的 所以我们将两种版本 都下载到iPhone
之后由iPhone来处理 Watch app安装任务 所以安装要从iPhone 到Apple Watch
而且… 我们在iOS 13和watchOS 6中 将完全改变这一点 所以现在App Store服务器 无论在何时何地 都可以安装这些app 而且它将应用于商店中的所有app
(安装) 所以 这意味着iOS app 不再包括Watch app 有些人可能会很高兴听到下面一点 Watch app不再会计入你的 iOS app蜂窝下载限制了
然后 谢谢
我们可以通过用bitcode 重新编译App Store中的 所有的app来实现这一操作 将iOS app 与Watch app分开来 也就是说每个设备可以 分别下载自己的app 所以iPhone有iPhone app 手表有Watch app
因此 我们可以直接将app下载到设备中 我们也第一次将 Watch app的 资源和变体细化 所以如果你的用户 用的是Series 4的设备 我们就可以安装特定适用于 该设备的变体 和体系结构大小 而不是其他 资源也是同样的道理 所以如果你已经将资源目录 配置为 将特定资源用于特定设备 那么我们就能将 特定的资源安装到特定的设备
说得简单一点就是 下载会更小 Watch app的 二进制规模也会更小 如果你是因为Swift 5和 ABI的稳定性而使用Swift 那么现在Swift dylibs 已经不包含在你的app里了 所以下载还会变得更小
所以 这就是我么安装app的方式 现在我们来说说 用户要如何获取你的app
在iOS App Store里 你的app仍旧可以找到 但是现在新的watchOS 6中 我们要向你介绍专为Apple Watch 打造的App Store
这是一个功能齐全的 App Store 有完整的功能部分 完整的产品详情页面 搜索 编辑 而且我得说 你甚至可以直接 在手腕上就能购买app 操作起来真的很酷 我真的很喜欢 现在我们来说说不同类型的app 以及它们在新的 Watch App Store中如何运行 (依存APP) 所以 现在商店里的所有app 我们都叫做依存app 因为Watch app在系统上 是依赖于iPhone app 而存在的
所以如果我在Watch App Store里 下载了一款app 系统会自动将iPhone版本 下载到你的iPhone
如果iPhone app 还没有安装完成 那么watchOS app 是启动不了的 因为系统认为Watch app 是依存于iPhone app的
(独立APP) 现在 不像依存app 独立app的意思是 Watch app可以单独运行 也就是说你 不用安装iPhone app 也可以启动Watch app
也就是说Watch app 是独立安装的 如果你同时下载了 iPhone和Watch app 那么用户可以 卸载iPhone app 而Watch app依旧存在
有些人可能开始紧张 可能开始思考 那我在商店里已经上架的app 会受到什么影响呢 那么我告诉你 那些有iOS app的 独立watchOS app 完全兼容旧版OS 而那些新的Watch app 谢谢
新的Watch app会由 watchOS或更高版本进行支持
(企业分发) 如果你想在企业内部分发app 很高兴告诉你 我们有完整的Xcode支持 来创建我们刚刚提到的不同变体 来将你的iPhone 和Watch app分离 而且当你使用Xcode完成流程时 在生成的清单plist中 会添加一个新的平台标识符密钥 用于告知系统安装内容以及安装位置
现在我们了解了 独立Watch app的重要性 现在就来说说 如何创建独立Watch app (创建独立Watch App) (演示) 现在我们进入Xcode 我来告诉你们 将现有app 转化为独立app有多简单
酷 现在我们进入Xcode 这是一款很棒的Watch app 现在它还是依存app 这是 我基本上已经完成了所有 让这个app独立的工作 因为这真的是一款在Watch上的 很好的闪卡app
所以我们来创建和运行这款app 并且看看手机模拟器和手表模拟器 与我们想的调试流程是不是一样的
现在我们运行Watch app 我可以马上启动调试会话 但是我们先让系统 将这款app独立起来 所以我们先停止调试会话
现在在WatchKit扩展的 目标编辑器中 我们可以看到在部署目标下方 有一个新的复选框 叫支持在未安装iOS app的 情况下运行 所以我来看看它 然后我再进行创建和运行 这样 通过该复选框 我就告诉系统这款app是独立的 我刚刚做得挺快的 所以现在我来 给你们看看一件很酷的事情
让我们关闭iPhone模拟器 因为该app是独立的 我们就不再需要 iPhone SIM卡了 所以我再创建 和运行该app一次 现在 我只创建和运行了手表模拟器 而且调试过程也更快
好
好 现在让我们来建立一款 只在手表上的app 所以我先关闭这个项目 为了创建新app 我点击文件 新项目
在watchOS下面 我看到了Watch app 还有带Watch app的 iOS app 现在我想创建 单独的手表app
所以我们选这个
好 然后 我们使用SwiftUI 这很酷 有很多好东西
我们再创立一个并发 之后我再保存到桌面
好
现在我们来创建和运行该app 再次强调 就像我们刚刚 说到的独立app一样 我们不需要iPhone模拟器 我们就创建和 运行手表app就行 直接运用手表模拟器 好
(演示) 谢谢
(XCODE中的APP) 我们刚刚谈到了如何迁移现有app 并将它做成 独立的Watch app 我们也可以创建 只在手表上运行的app 我们也说了 模拟器体验如何大大改善 与模拟器体验一样 我们接下来就谈谈调试 watchOS 6中的调试过程 对于模拟器来说 现在快了十倍 (调试) 谢谢
设备调试速度提高了一倍 今年我们也做了许多努力 让它比以往更加可靠
调试依旧通过iPhone代理 但是我想给你一个小小的专业提示 如果你的手机和手表 都连着Wi-Fi 那么系统会选择更快的线路 你就可以看到调试过程会更快
现在我们来深入探讨 如何让app独立起来的不同方面
为此我们要讲到三点 我们会说到如何通过身份验证 获取用户数据 或者直接从用户处 获取用户私有数据
之后是如何将信息传输至设备 最后我们会讲到如何连接 和收集自己的app数据
首先来谈谈身份验证 (登录和注册) 处理身份验证的主要方式 就是注册和登录 现在在watchOS 6中 你可以直接在手表上建立注册验证 你可以使用WK警报操作API 支持条款和条件
以及在watchOS 6 和我们其他的Apple平台上 现在都支持使用Apple登录
然后我们会谈谈如何创建自己的 自定义密码登录
我们先来说说使用Apple登录 (使用Apple登录) 使用Apple登录是一项简单安全 以及私密的方法从用户处获取信息 用户不需要填写表格 不用想新的密码 他们可以就 选择一个邮件地址 然后继续登录
而且每个账户都内置 两个因子身份验证 用户也不需要进行邮件验证
我们也支持在所有设备上登录 此外还有适用于任何其他类型设备的 JavaScript SDK
所以通过Apple登录 确保并使用了现在 可在watchOS上 使用的身份验证服务框架
如果你有任何特定的UI想要创建 现在可以使用 授权Apple ID按钮 并将其嵌入你的app中 这样 你的用户点击按钮 你就可以收到ID活动 然后你就可以使用身份验证服务框架 来显示相应的系统UI
这周还有其他很棒的演讲 如果你想了解更多关于 使用Apple登录的内容 我强烈建议你去听听
好了 要在WatchKit扩展的 Xcode中启用Apple登录 只需添加一项新功能 并启用通过Apple登录授权 上手就是这么轻松 (文本字段) 现在你有了自己的自定义密码登录 现在我要向你介绍今年 watchOS推出的新文本字段
这样你就可以在SwiftUI或 WatchKit中嵌入此文本字段
你就可以创建一个像这样的UI 然后告诉用户 我们只需要用户名和密码 我们使用占位符文本 来指导用户要输入什么
如果为该特定文本字段设置了 适当的文本内容类型 然后被调出的系统文本输入控制器 会自动改变成适当的文本类型
所以 对于这个流程 比如用户点击用户名 然后系统文本输入控制器就会被调出 用户就可以通过语音 或是手写来输入内容 现在有了一个新的选项 叫连续性键盘 如果用户点击这一选项
Apple Watch就会说 “在你的iOS或者iPad OS 设备上继续完成输入” 然后你会在 iPhone或iPad上 收到通知 如果它们是用相同的 iCloud账户登录的 如果你曾经使用过 带有文本字段的tvOS 那么这个流程你就很熟悉了
当用户点击输入 他们就可以轻松地将文本 输入到他们的iOS键盘中 再次强调 文本内容类型 就像我们刚才说到的那样 在这里会有自动填充建议 然后用户可以 从他们的iCloud钥匙串 或者是首选密码管理器中 选择自动填充建议
(iOS的密码自动填充建议) 现在 如果你想让系统置顶你的 密码自动填充建议 那么 你要保证设置正确的文本内容类型 并将关联域名添加到 你的WatchKit扩展中 关联域名是将你的app 和网站联系起来的好方法 这样系统就知道 用户的iCloud钥匙串中 可能存在的凭证 可以置顶并显示在iOS键盘的顶部
一旦用户选择自动填充建议 系统就会尽力 同时填写用户名和密码
对于基于密码的登录 有时候你可能会需要支持一次性密码 如果你设置了正确的文本内容类型 一次性密码就会自动填充 如果你是通过iMessage 或短信发送的话 然后系统文本输入控制器 将显示自动填充建议 用户就可以选择 之后继续进行身份验证
(文本字段)
再次强调 对于文本字段 你可以在SwiftUI 或WatchKit中使用 保证你设置了关联域名 来置顶适当的自动填充建议 运用连续性键盘测试流程 如果需要的话 构建一次性密码支持
我们有时要用到的另一种用户信息 就是私密用户信息 我们想要通过不同的可用框架 来向用户询问这些信息 (隐私管理) 在watchOS中 我们已经支持直接访问日历 联系人 手势 甚至一切其他类型的信息 如定位 现在在watchOS 6中 我们现在支持直接在 Apple Watch上提供健康授权
谢谢
现在用户可以选择 是否允许所有数据请求访问 或只是允许特定请求
这就是我们如何在独立app中 获取用户信息 现在我们来谈谈如何 将信息传输至设备中 当然 传输信息的最好方式 就是推送通知 现在在watchOS 6中 手表首次成为独立推送目标 (推送通知) 谢谢
也就是说 你可以将用户可见通知和后台通知 直接发送至Apple Watch 而这是基于用户通知框架 我们用的是和其他Apple设备 一样的基础设施 (通知) 总的来说 你的服务器会直接 向APNS发送请求标头和 有效负载 APNS是Apple通知推送服务 然后 APNS会将有效负载 发送至适当设备 在watchOS中 有效负载和其他平台是一样的 而在在APNS请求标题上 有一个新密钥 (APNS请求标题) 新密钥是APNS推送类型
它也支持所有Apple平台 以及所有OS
你可以将该密钥设置为提醒或是后台 我觉得它的使用方式就是 如果用户会看到该通知 他们要被提醒 那么就将推送类型设置为提醒 如果你只需发送后台提醒 只是想在有新内容可用时 在设备中唤醒app 那么你就可以设为后台推送类型
(推送通知) 对于注册和推送 对于注册而言 我们会获得WatchKit令牌 就像过去发送通知一样 你的提醒通知 会推送至Watch app 方式与以前一样 将用户通知与WatchKit结合
而后台通知 则会推送只WK扩展代理
如果你加密了任何有效负载 由于我们现在 在watchOS上也有完整的 通知服务扩展 所以你可以直接在设备上 解密该有效负载 之后向用户展示
在Xcode项目中 在目标编辑器中启用推送通知 如果你选择了WatchKit扩展 你就可以直接添加新功能 并启用推送通知权利
如果你想要支持后台通知 你可以启用后台模式 然后启用远程通知复选框
我们来看看代码
现在我们在扩展代理中 app也完成了启动 我们注册通知要做的第一件事就是 征求用户许可 所以如果我们在 UN用户通知中心请求授权 用户选择了授予访问权限 那我们就可以WK共享扩展上 调用远程注册通知
之后 如果我们完成了远程通知调用注册 那么我们就可以获取设备令牌 并将该通知转发给 我们的通知提供程序 或者是我们自己的服务器
当然 我们也希望确保 实施无法注册远程通知 以防故障发生
对于后台通知而言 它们会推送收到远程通知 以及获取完成处理程序 和后台获取结果 所以 当你收到该通知 你就可以开始处理后台通知 然后只需使用适当的后台获取结果 调用完成处理程序
(细节) 再次提醒 当发送推送到watchOS时 需要APNS推送类型 即APNS请求标头的新密钥 并且它支持所有平台 所以你要将通知推送至 任何Apple设备 只需确保添加APNS推送类型
并且APNS请求标题上的 APNS密钥 是你的WatchKit app包标识符 而不是WatchKit扩展 我只想快速提一下
如果你有多个app 比如 iPhone App和Watch app 你想同时向两个设备发送通知 当你这么做时 系统会在同步推送通知时 适当删除重复通知
(WATCHOS中的并发推送) 还有另一种向设备推送通知的好方法 那就是并发推送 并发推送是更新你的app的好方法 如果活动表盘已启用并发功能的话
而这是通过PushKit完成的 现在在watchOS上也可使用 并且你可以使用PushKit 进行注册和推送
,如果你用的是过去 基于iOS的旧并发推送机制 我们建议你现在直接将并发推送 发至Watch
在代码中
我们可以通过设置PK推送注册表 来注册并发推送 设置代理 之后指定所需推送类型
完成之后我们就要获取设备令牌 只需转发至我们的服务器 然后处理任何可能发生的失效
之后我们发送推送 然后运用适当的PushKit方法 处理接受并发推送 然后重新加载并发时间表
好了 这就是我们向设备推送信息的方法 我们接下来讲讲如何收集信息 以及处理连接性问题
(联网) 一般来说 在联网方面 我们会用URL会话 这在watchOS上 已经可用很久了 至于 至于CloudKit 我们也用CloudKit 来收集app数据 (URL会话) 如果你在使用手表连接 并且要依赖iPhone app 来获取特定信息 那么你就要将所有的 手表连接使用情况 迁移至NSURL会话
再次强调 对于手表来说 用户基本上使用 Watch app的时间 都会很短 然后他们就会放下手腕 因此 务必使用后台会话 确保URL会话能够正确完成
(手表连接) 所以 手表连接功能依旧是可用的
你依旧可将其用于任何伴随app的 特定互动 但只在需要的时候使用
现在有一项为伴随app 安装的Boolean属性 它会让你知道该app 是否有iPhone版本
在CloudKit中 如果你已经在使用 那么你会很高兴听到 我们现在在watchOS上 也有完整的CK订阅支持 它与CloudKit 通知支持相辅相成 因此 如果你不想管理自己的 服务器或通知提供程序 你就可以运用CloudKit 来发送通知
在网上有一个很棒的演讲 如果你想了解更多 关于CloudKit 及其最佳运用的信息 请参阅该演讲
对于CK订阅 它是订阅在任何其他设备上发生的 数据库更改的好方法 (CK订阅) 之后你会收到后台通知推送 它们会告诉你什么时候更新app 然后你就可以检索只在app 和CloudKit容器之间的更改
进一步说 如果你的用户 正在使用iPhone app 他们更改了数据库 该项更改就会 发送至CloudKit CloudKit就会知道 这是一项订阅 CloudKit就会告诉APNS 向其他设备 发送发送后台通知 告诉它们有一项订阅 在这个例子中 就是Watch app
之后 如果Watch app 如果用户对Watch app 做出了更改 该循环就会自动重复 如何发送通知在任何其他设备上 都遵循一样的规则
想要进行CloudKit订阅 你可以设置通知信息 然后将发送内容可用 设为真 然后CloudKit就会向 我们刚刚说过的 相同的回调代理发送通知 你就会收到远程通知 这样 你就可以处理并检索 只在你的app和 CloudKit容器之间 发生的更改
好了 这就是我们说到的 如何创建独立的Watch app 如何获取用户信息 以及如何向设备推送信息 最后是如何获取自己的app数据的 三种主要方式
(总结)
用户喜欢Apple Watch 给他们带来的自由和独立 现在也有许多可供使用的系统和 开发者功能 所以务必使你的Watch app 独立起来 因为说实话 因为现在用户可能比以往更加希望 Watch app能够独立 (更多信息) 网上还有更多关于演讲 以及实验室的详细信息 再次感谢大家光临 希望你们在WWDC过得愉快 谢谢
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。