сеанс (_: активацииDidCompleteWith: ошибка :) не вызывается на Apple Watch (но вызывается в симуляторе) - PullRequest
0 голосов
/ 09 декабря 2018

Я создал простой класс 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)
    }
}

В моем расширении приложения для часов я загружаю создание экземпляра этого класса

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Смотрите.

Такие методы, как

 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 и сторонних производителей работают нормально).

1 Ответ

0 голосов
/ 09 декабря 2018

Для дальнейшей справки:

Перезапуск моих Apple Watch (что я никогда не делал иначе) действительно решил проблему ...

...