0

I'm trying to use Sparkle's UpdaterDelegate to perform some action when a specific change occurs in the update state of my app. But I don't know how to attach it to my update controller.

First I declared a SPUStandardUpdaterController

SPUStandardUpdaterController(
     startingUpdater: true,
     updaterDelegate: UpdaterDelegate(),
     userDriverDelegate: nil
)

Then I declared an UpdaterDelegate

class UpdaterDelegate: NSObject, SPUUpdaterDelegate {
     // some delegate functions here
}

Then I tried to debug the code, but I didn't see any output of the delegate method on the console.

I'm very confused because it seems that either of my methods are correct, but the delegate method just doesn't have the correct link.

1 Answers1

0

I would suspect that your delegate is not called because it is not stored properly.

Check in the debugger output how long your delegate "lives", with the old trick:

class UpdaterDelegate: NSObject, SPUUpdaterDelegate {
    deinit {
        print("UpdaterDelegate deinit")
    }
    // SPUUpdaterDelegate methods
}

For reference, here is the App structure of one of my apps stripped down to a bare minimum to run Sparkle:

import SwiftUI
import Sparkle

var updaterController: SPUStandardUpdaterController?
let updaterDelegate = UpdaterDelegate()

@main
struct MyApp: App {    
    init() {
        /// Set up updater
        updaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: updaterDelegate, userDriverDelegate: nil)
        updaterController?.updater.updateCheckInterval = 86.400 // 'daily' in secs
        updaterController?.updater.automaticallyChecksForUpdates = true
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class UpdaterDelegate: NSObject, SPUUpdaterDelegate {
    deinit {
        print("UpdaterDelegate deinit")
    }
    // SPUUpdaterDelegate methods
}

You can see that I store updaterController and updaterDelegate for the whole lifecycle of the app.

soundflix
  • 928
  • 9
  • 22