watchOS|创建依赖型 Apple Watch 应用

了解如何在 watchOS 上开发依赖 iPhone 的 Apple Watch 应用。

Apple Watch 应用有两种架构,独立 Watch App 以及依赖型 Watch App。后者必须配套的 iPhone 应用,可以与 iPhone 应用共享数据。

创建依赖型 Watch App

在 Xcode 中,点击 File → New → Target → watchOS → App,然后在创建时选择Companion App(依赖型)

点击 Finish,Xcode 会自动创建号 Target 并配置 Bundle ID、签名等。

将 iOS App 数据共享给 Watch App

理解 Watch Connectivity 框架

在两者之间数据同步的最佳实践方案是 Watch Connectivity 框架。

Watch Connectivity | Apple Developer Documentation
Implement two-way communication between an iOS app and its paired watchOS app.

Watch Connectivity 底层通过多种方式来尽可能保证数据传输的稳定性(通过 WiFi 或蓝牙、重试机制等)

但是,对开发者来说并不需要关心这些底层细节,我们只需要知道在何时选择合适的 API:

  • sendMessage() // "我需要立即发送"
  • transferUserInfo() // "不急,系统安排就行"
  • updateApplicationContext() // "只要最新数据"
// 你的代码
WCSession.default.transferUserInfo(["data": data])

创建 WatchSyncManager 服务组件

名称使用 WatchSyncManager 而不是 WatchSyncViewModel。Manager 负责数据同步、网络通信等服务层逻辑,Watch 同步属于服务层,不是视图层。

WatchSyncManager 主要包含两个核心功能,

  • 使用 Watch Connectivity 提供的 sendMessage(实时通信)、transferUserInfo(后台传输)和 updateApplicationContext(最新状态) 方法来实现数据推送。
  • 使用 App Groups + UserDefaults 来实现数据持久化与离线可用。

特别强调:WatchSyncManager 是一个纯服务层组件,不包含业务逻辑。

具体可以参考 CodeCat 项目的实现。具体的业务逻辑在 PickupViewModel 中实现。

在 App文件初始化 WatchSyncManager

在 App 文件的 init 初始化器中,配置 WatchSyncManager.configure。

在 ViewModel 中调用 WatchSyncManager 单例

在 ViewModel 方法中,需要同步数据的时候,主动调用 WatchSyncManager 单例中的数据同步方法,实现将数据同步给 Apple Watch。

一般放在 ViewModel 的 fetch 方法中,例如 fetchPickups()