I have some troubles with WKExtendedRuntimeSession.
- I have set the
WKExtendedRuntimeSessionDelegatein my ExtensionDelegate - I start the session when the app is active with
.start() - 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
}
As per Apple docs:
https://developer.apple.com/documentation/watchkit/wkextendedruntimesession/3131065-invalidate
So do this: