Search code examples
iosswiftsessionwatchconnectivity

WatchConnectivity not activating on iOS side when running on Simulator


I am trying to run my project on Simulator but the iOS side does not activate and only the Watch side manages to activate.

Here is my ScoresInterfaceController.swift (Watch side)

import WatchConnectivity    

class ScoresInterfaceController: WKInterfaceController, WCSessionDelegate {

    // Used to send information to the iOS app
    var applicationDict = [String: Int]()

    // Starts a session to communicate with the iOS app
    var session: WCSession!

    // For WCSession
    override init() {
        super.init()

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

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

Here is my ScoreViewController.swift (iOS side)

import WatchConnectivity    

class ScoreViewController: UIViewController, WCSessionDelegate {    

    // Starts a session to communicate with the Watch app
    var session: WCSession!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        if(WCSession.isSupported()) {
            session = WCSession.default()
            session.delegate = self
            session.activate()    //Not activating when run on Simulator      
        }
    }

    // For WCSession

    /** Called when the session has completed activation. If session state is WCSessionActivationStateNotActivated there will be an error with more details. */
    @available(iOS 9.3, *)
    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {}

    // Receives data from Watch app
    @nonobjc func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {}

    func sessionDidBecomeInactive(_ session: WCSession) {}

    func sessionDidDeactivate(_ session: WCSession) {
        WCSession.default().activate()
    }
}

Here is the error message:

enter image description here

I followed this tutorial but I cannot figure out what the issue is:

http://kristina.io/watchos-2-how-to-communicate-between-devices-using-watch-connectivity/


Solution

  • Changed my ScoreViewController's definition of session from this:

    @nonobjc func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {}
    

    to this:

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any])