ios - session (_ :activationDidCompleteWith:error:) not called on Apple Watch (but is called in Simulator)

标签 ios swift watchkit watchconnectivity

我创建了一个简单的 swift 类:

import Foundation
import WatchConnectivity

class WatchCommunication : NSObject, WCSessionDelegate {

    var session: WCSession!

    override init() {
        super.init()

        if WCSession.isSupported() {
            print("WCSession is supported")
            self.session = WCSession.default
            self.session.delegate = self
            if session.activationState == WCSessionActivationState.activated {
                print("activationState is activated")
            } else {
                print("activationState is not activated")
                self.session.activate()
            }
        } else {
            print("WCSession is not supported")
        }
    }

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        print("activationState", activationState.rawValue)
        print(error)
    }
}

在我的 Watch App Extension 中,我加载创建了这个类的一个实例

class ExtensionDelegate: NSObject, WKExtensionDelegate {

    let watchCommunication: WatchCommunication = WatchCommunication() 

    // ...

当我在模拟器中测试这段代码时,我看到了以下记录

 WCSession is supported
 activationState is not activated
 activationState 2
 nil

一切正常。 当我在测试 iPhone X 和配对的 Apple Watch 3 上运行相同的应用程序时,日志显示

 WCSession is supported
 activationState is not activated

看来方法是这样的

 func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {

从未在我的 Apple Watch 上调用过。

类似的方法

 func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { 

也不会在设备上调用(但在模拟器上工作)。

在 iPhone X 方面,actionDidCompleteWith 方法被调用,activationState 2 (activated) 和 updateApplicationContext 不会抛出错误。

但是 iPhone 和 Apple Watch 之间存在通信,因为方法 https://developer.apple.com/documentation/healthkit/hkhealthstore/1648358-startwatchapp确实会在 watch 上开始锻炼(所有 Apple 和第三方 watch 应用程序都可以正常工作)。

最佳答案

更多引用:

重新启动我的 Apple Watch(我从来没有这样做过)确实解决了这个问题...

关于ios - session (_ :activationDidCompleteWith:error:) not called on Apple Watch (but is called in Simulator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53693147/

相关文章:

ios - 将 float 操作按钮添加到选项卡栏 Controller 内的 View Controller

ios - 未登录 iCloud 时 Swift CloudKit 读取

swift - 无法获得自动布局以使两个按钮并排留在那里

ios - 为什么我们需要在iOS中设置keywindow

ios - 两个不同单元格的 didSelectRowAtIndex - watchKit

ios - swift watch 。将数据从一个 View Controller 发送到另一个

ios - MMDrawerController 和约束

ios - 从主线程访问布局引擎后,不得从后台线程执行对布局引擎的修改

swift - 服务器 Swift 与 mongodb 管理器单例

ios - 我可以创建一个没有 Storyboard的 WatchKit 应用程序(完全在代码中)吗?