смотреть на телефонную связь - не получил приложение, контекст не стрелял - PullRequest
0 голосов
/ 12 октября 2018

У меня проблемы со связью между AppleWatch и iPhone.

  • Связь между iPhone и Watch работает нормально.

  • Часы на iPhone: didReceiveApplicationContext в AppDelegate не запускается !!!

-

У меня есть это в (iPhone) AppDelegate:

import WatchConnectivity

-

if WCSession.isSupported() {
    WCSession.default.delegate = self
    WCSession.default.activate()
}

...

extension AppDelegate: WCSessionDelegate {

    // MARK: WCSessionDelegate

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

    func sessionDidBecomeInactive(_ session: WCSession) {
        //
    }

    func sessionDidDeactivate(_ session: WCSession) {
        //
    }

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
        DispatchQueue.main.async {
            print("Phone didReceiveApplicationContext")
        }
    }
} 

В часах InterfaceController у меня есть:

import WatchConnectivity

-

if WCSession.isSupported() {
    WCSession.default.delegate = self
    WCSession.default.activate()
}

-

extension InterfaceController: WCSessionDelegate {

    // MARK: WCSessionDelegate

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

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String: Any]) {
        DispatchQueue.main.async {
            print("Watch didReceiveApplicationContext")
        }
    }
}

-

Я пытаюсь связаться, "обновляя контекст приложения", вот так:

@IBAction func buttonPressed() {
    guard WCSession.isSupported() else {
        return
    }

    let message = ["buttonPressed" : true]
    do {
        try WCSession.default.updateApplicationContext(message)
    } catch {
        print("Something went wrong")
    }
}

-

Почему нет 't didReceiveApplicationContext метод запускается в AppDelegate?

-

Я считаю, что отладка приложений Watch довольно сложна, включая необходимость подключения отладчика к приложению iPhone и т. д. ...возможно, в способе отладки что-то не так?

1 Ответ

0 голосов
/ 13 октября 2018

Это может быть закрыто как дубликат, так как я наконец нашел решение (после большого количества проб и ошибок и поиска).

Я не уверен, что моя проблема связана с WCSession.default.updateApplicationContext, носледующий пост SO объясняет, что вы можете использовать sendMessage, хотя вы должны быть осторожны с replyHandler.

Если вы отправляете сообщение с часов, используя sendMessage:replyHandler:errorHandler:, то только соответствующий метод делегата (session:message:replyHandler:) будет срабатывать в AppDelegate на телефоне.И вы ДОЛЖНЫ звонить replyHandler !!!

WCErrorCodeDeliveryFailed: Не удалось доставить полезную нагрузку

Итак, я использую updateApplicationContext для телефона> Часы и sendMessage:replyHandler:errorHandler: для часов> Телефон

...