2

I have a problem when I try to start WKExtendedRuntimeSession

-[WKExtendedRuntimeSession dealloc]:285: WKExtendedRuntimeObject was dealloced while running. Invalidating the session 46EB2DE0-311C-41D0-93BE-46FE744B685A
class SessionCoordinator: NSObject, WKExtendedRuntimeSessionDelegate {
    let runtimeSession = WKExtendedRuntimeSession();

    override init() {
        super.init()

        runtimeSession.delegate = self;
        runtimeSession.start();
    }

    ...
}
  • Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking. – Community Nov 09 '22 at 14:03

1 Answers1

0

I ran across the same issue. Here is my solution.

  1. 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()
    }
}
  1. Init the singleton. You can do this in .appear() or in your WKApplicationDelegate applicationDidBecomeActive()

_ = ExtendedRunTime.shared

  1. Start the session where it is needed

ExtendedRunTime.shared.start()

  1. Make sure to stop it when finished

ExtendedRunTime.shared.stop()

eric
  • 45
  • 7