Extended Runtime Sessions in watchOS stops working after first run

1k Views Asked by At

I have some troubles with WKExtendedRuntimeSession.

  1. I have set the WKExtendedRuntimeSessionDelegate in my ExtensionDelegate
  2. I start the session when the app is active with .start()
  3. I stop sessions by using session.invalidate()

When I start it again I get the following error:

-[WKExtendedRuntimeSession _start]:308: Unable to start sessions because state == WKExtendedRuntimeSessionStateInvalid. notifying delegate <MYAPP_Extension.ExtensionDelegate: 0x17e663d0>. Error is (null)

CODE

My Extension Delegate

var session = WKExtendedRuntimeSession()

class ExtensionDelegate: NSObject, WKExtensionDelegate, WKExtendedRuntimeSessionDelegate {

    func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
        print("Session stopped at", Date())
    }

    func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
        print("Session started at", Date())
    }

    func extendedRuntimeSessionWillExpire(_ extendedRuntimeSession: WKExtendedRuntimeSession) {

    }

    func applicationDidBecomeActive() {

        session.delegate = self
    }

My start happens by .onAppear(perform:{ session.start() })

Cancelation:

func cancelNow() {
        self.timer.connect().cancel()
        session.invalidate()
        return
    }
1

There are 1 best solutions below

0
nip_magic On

As per Apple docs:

After calling invalidate(), you can no longer run the session. Create and start a new session instead.

https://developer.apple.com/documentation/watchkit/wkextendedruntimesession/3131065-invalidate

So do this:

var session: WKExtendedRuntimeSession!

private func startSession() {
    session = WKExtendedRuntimeSession()
    session.delegate = self
    session.start()
}