我创建了一个简单的 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/