WatchConnectivity中updateApplicationContext调用后手表端收不到数据问题
可行解决步骤
- 校验两端WCSession的初始化流程
手表端需在生命周期早期(如ExtensionDelegate的applicationDidFinishLaunching方法中)依次执行以下代码,漏设代理或未激活都不会触发接收回调:
手机端同样需要提前完成上述WCSession激活流程,仅校验状态未完成激活会导致静默传输失败。guard WCSession.isSupported() else { return } WCSession.default.delegate = self WCSession.default.activate() - 校验传输数据类型合法性
ApplicationContext仅支持属性列表类型(字符串、数字、数组、字典、日期、Data等),确认你代码中state变量没有包含自定义类、可选值等非属性列表类型,这类数据即使调用updateApplicationContext未抛出错误,也会出现传输失败无提示的情况。 - 修复模拟器调试异常
模拟器经常出现配对状态假正常的问题,先同时重启iOS模拟器和WatchOS模拟器,再依次运行iOS端App、WatchOS端App,确认Watch App的运行目标为与当前iOS模拟器配对的Watch设备,可解决绝大多数模拟器传输异常问题。 - 规避上下文重复发送限制
updateApplicationContext仅在传输内容与上一次缓存内容不一致时才会触发传输,多次调用时如果state无变化,手表端不会收到回调。调试时可先发送空字典[:]清空旧上下文,再发送测试数据验证。 - 调整日志打印方式
didReceiveApplicationContext默认在后台线程触发,Xcode控制台有时不会打印后台线程的print()输出,将调试日志替换为NSLog()可更稳定看到输出内容。
内容的提问来源于stack exchange,提问作者Gefei Shen
相关产品推荐
相关产品推荐

