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 底层通过多种方式来尽可能保证数据传输的稳定性(通过 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()
。
