diff --git a/mac/Sources/CodeBurnMenubar/CodeBurnApp.swift b/mac/Sources/CodeBurnMenubar/CodeBurnApp.swift index c70c67c..501dcd6 100644 --- a/mac/Sources/CodeBurnMenubar/CodeBurnApp.swift +++ b/mac/Sources/CodeBurnMenubar/CodeBurnApp.swift @@ -30,11 +30,21 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSPopoverDelegate { private let store = AppStore() let updateChecker = UpdateChecker() private var refreshTask: Task? + /// Held for the lifetime of the app to opt out of App Nap and Automatic Termination. + /// Without this the 15s refresh Task gets suspended whenever the user is interacting with + /// another app, and the status bar label freezes until they click the menubar icon (which + /// calls NSApp.activate and wakes the app back up). + private var backgroundActivity: NSObjectProtocol? func applicationDidFinishLaunching(_ notification: Notification) { // Menubar accessory -- no Dock icon, no app switcher entry. NSApp.setActivationPolicy(.accessory) + backgroundActivity = ProcessInfo.processInfo.beginActivity( + options: [.userInitiated, .automaticTerminationDisabled, .suddenTerminationDisabled], + reason: "CodeBurn menubar polls AI coding cost every 15 seconds while idle in the background." + ) + restorePersistedCurrency() setupStatusItem() setupPopover()