diff --git a/slab/menuband/Info.plist b/slab/menuband/Info.plist index f4ca134b55..769008ac0c 100644 --- a/slab/menuband/Info.plist +++ b/slab/menuband/Info.plist @@ -38,7 +38,7 @@ CFBundleShortVersionString 1.6.13 CFBundleVersion - 173 + 174 ITSAppUsesNonExemptEncryption LSApplicationCategoryType diff --git a/slab/menuband/Sources/MenuBand/AppDelegate.swift b/slab/menuband/Sources/MenuBand/AppDelegate.swift index fa612ec801..139c0783c9 100644 --- a/slab/menuband/Sources/MenuBand/AppDelegate.swift +++ b/slab/menuband/Sources/MenuBand/AppDelegate.swift @@ -257,12 +257,12 @@ final class AppDelegate: NSObject, NSApplicationDelegate { /// side (or a lapsed window) restarts the run. private var quietFocusMonitorGlobal: Any? private var quietFocusMonitorLocal: Any? - /// Both builds prefer a listen-only CGEventTap over an NSEvent global - /// keyboard monitor. Store builds because the monitor asks for - /// Accessibility trust the sandbox can't have (Input Monitoring covers - /// the tap instead) — direct builds because the monitor has silently - /// delivered zero keyDowns while flagsChanged kept flowing, which let - /// ⌘C read as a bare ⌘ tap (MenuBandLauncher's header tells the story). + /// The direct build prefers a listen-only CGEventTap over an NSEvent + /// global keyboard monitor, which has silently delivered zero keyDowns + /// while flagsChanged kept flowing and let ⌘C read as a bare ⌘ tap + /// (MenuBandLauncher's header tells the story). The Store build installs + /// neither: a keyboard tap needs Input Monitoring, and App Review rejects + /// a Mac App Store app that asks for it (2.4.5(v), 1.6.13 build 173). private var quietFocusTap: CFMachPort? private var quietFocusTapSource: CFRunLoopSource? private var quietFocusTapHandler: ((NSEvent.EventType, UInt16, NSEvent.ModifierFlags) -> Void)? @@ -2987,16 +2987,15 @@ final class AppDelegate: NSObject, NSApplicationDelegate { } quietFocusTapHandler = handler #if MAC_APP_STORE - if CGPreflightListenEventAccess() || CGRequestListenEventAccess() { - if !installQuietFocusTap() { - NSLog("MenuBand: Input Monitoring granted but Command gesture tap failed") - } - } else { - NSLog("MenuBand: Input Monitoring not granted; Command gesture is local-only") - quietFocusMonitorLocal = NSEvent.addLocalMonitorForEvents( - matching: Self.quietFocusMonitorMask - ) { handler($0.type, $0.keyCode, $0.modifierFlags); return $0 } - } + // Store build: never ask for Input Monitoring. App Review rejected + // 1.6.13 (build 173) under 2.4.5(v) for the prompt that + // `CGRequestListenEventAccess` raises at launch, and a keyboard + // CGEventTap raises the same prompt on its own. The gesture is + // local-only here: it works while Menu Band is the focused app, + // which is where quiet focus is armed from anyway. + quietFocusMonitorLocal = NSEvent.addLocalMonitorForEvents( + matching: Self.quietFocusMonitorMask + ) { handler($0.type, $0.keyCode, $0.modifierFlags); return $0 } #else // Direct build: the tap is the primary route here too. The NSEvent // global monitor has silently stopped delivering keyDowns while diff --git a/slab/menuband/project.yml b/slab/menuband/project.yml index 3eec790e72..2ef036b6c5 100644 --- a/slab/menuband/project.yml +++ b/slab/menuband/project.yml @@ -39,7 +39,7 @@ settings: # The direct-download build keeps its own literals in Info.plist (SwiftPM # never sees these settings); bump both when releasing. MARKETING_VERSION: "1.6.13" - CURRENT_PROJECT_VERSION: "173" + CURRENT_PROJECT_VERSION: "174" packages: ACMacAudio: