【问题标题】:session(_:activationDidCompleteWith:error:) not called on Apple Watch (but is called in Simulator)session(_:activationDidCompleteWith:error:) 未在 Apple Watch 上调用(但在模拟器中调用)
【发布时间】:2018-12-09 14:06:48
【问题描述】:

我创建了一个简单的 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 确实会在手表上开始锻炼(并且所有 Apple 和第三方手表应用程序都可以正常工作)。

【问题讨论】:

    标签: ios swift watchkit watchconnectivity


    【解决方案1】:

    进一步参考:

    重启我的 Apple Watch(我从不这样做)确实解决了问题...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多