You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 14中WatchConnectivity连接问题:SwiftUI Todo App手表扩展无法配对iPhone模拟器

Apple Watch模拟器与iPhone模拟器连接问题排查方案

基础环境检查

  • 确保iPhone和Watch模拟器属于同一个Apple ID:打开iPhone模拟器的「设置」→「登录iPhone」,用同一账号登录Watch模拟器的「设置」→「登录Apple Watch」
  • 确认两个模拟器的系统版本匹配:比如iPhone用iOS 17,Watch必须对应watchOS 10,版本不兼容会直接导致连接失败
  • 检查模拟器配对状态:打开Xcode的「Window」→「Devices and Simulators」,选中Watch模拟器,确认它已与目标iPhone模拟器完成配对

WatchConnectivity配置修正(SwiftUI场景)

1. iPhone端初始化WCSession的正确姿势

在App结构体的init方法中完成WCSession初始化,不要在View中延迟初始化:

import WatchConnectivity

@main
struct TodoApp: App {
    init() {
        guard WCSession.isSupported() else { return }
        let session = WCSession.default
        session.delegate = self
        session.activate()
    }
    
    // 其余App结构体代码
}

extension TodoApp: WCSessionDelegate {
    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        if let error = error {
            print("WCSession激活失败: \(error.localizedDescription)")
            return
        }
        print("WCSession激活成功,状态: \(activationState.rawValue)")
    }
    
    // 必须实现的空代理方法
    func sessionDidBecomeInactive(_ session: WCSession) {}
    func sessionDidDeactivate(_ session: WCSession) {}
}

2. Watch端的初始化注意事项

Watch端同样要在WatchApp的init中激活WCSession,代理设置不能遗漏:

import WatchConnectivity

@main
struct TodoWatchApp: App {
    init() {
        guard WCSession.isSupported() else { return }
        let session = WCSession.default
        session.delegate = self
        session.activate()
    }
    
    // 其余WatchApp结构体代码
}

extension TodoWatchApp: WCSessionDelegate {
    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        if let error = error {
            print("Watch WCSession激活失败: \(error.localizedDescription)")
            return
        }
        print("Watch WCSession激活成功")
    }
    
    // 必须实现的空代理方法
    func sessionDidBecomeInactive(_ session: WCSession) {}
    func sessionDidDeactivate(_ session: WCSession) {}
}

模拟器重置与缓存清理

  • 重置两个模拟器:打开模拟器的「Hardware」→「Erase All Content and Settings」,分别重置iPhone和Watch模拟器后重新配对
  • 清理Xcode缓存:执行Command + Shift + Option + K清理构建缓存,再执行Command + Shift + K清理项目缓存,之后重新构建运行

Core Data同步的前置逻辑

务必在WCSession激活成功后(即activationDidCompleteWith回调确认无错误时),再触发Core Data数据的传输逻辑,避免因连接未就绪导致的同步失败。


内容的提问来源于stack exchange,提问作者서종현학부생

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:40:59