Смотреть на телефонную связь - сделал, получил приложение, контекст не стрелял

У меня проблемы с обменом данными между 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")
    }
}

-

Почему не didReceiveApplicationContext метод огня в AppDelegate?

-

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

1 ответ

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

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

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

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

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

Другие вопросы по тегам