I ran across the same issue. Here is my solution.
- Create a simple singleton class to manage WKExtendedRuntimeSession
import Foundation
import SwiftUI
class ExtendedRunTime: NSObject, WKExtendedRuntimeSessionDelegate {
static let shared = ExtendedRunTime()
let session: WKExtendedRuntimeSession
override init() {
// Create the session object.
session = WKExtendedRuntimeSession()
super.init()
// Assign the delegate.
session.delegate = self
}
func extendedRuntimeSession(_ extendedRuntimeSession: WKExtendedRuntimeSession, didInvalidateWith reason: WKExtendedRuntimeSessionInvalidationReason, error: Error?) {
print("didInvalidateWithReason: \(reason)")
}
func extendedRuntimeSessionDidStart(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
print("extendedRuntimeSessionDidStart")
}
func extendedRuntimeSessionWillExpire(_ extendedRuntimeSession: WKExtendedRuntimeSession) {
print("extendedRuntimeSessionWillExpire")
}
func start() {
session.start()
}
func stop() {
session.invalidate()
}
}
- Init the singleton. You can do this in .appear() or in your WKApplicationDelegate applicationDidBecomeActive()
_ = ExtendedRunTime.shared
- Start the session where it is needed
ExtendedRunTime.shared.start()
- Make sure to stop it when finished
ExtendedRunTime.shared.stop()