From 37ffe2f962adf2820f68033e93340d5d019f226f Mon Sep 17 00:00:00 2001 From: "prompt.ac/@jeffrey" Date: Sat, 19 Sep 2026 10:38:30 -0700 Subject: [PATCH] =?UTF-8?q?menuband:=20release=201.6.13=20(build=20174)=20?= =?UTF-8?q?=E2=80=94=20no=20Input=20Monitoring=20in=20the=20Store=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit App Review rejected build 173 under 2.4.5(v): the Store build's ⌘⌘ quiet-focus gesture called CGRequestListenEventAccess at launch, which raises the Input Monitoring prompt. The Store branch now installs only the local key monitor; no request, no keyboard event tap. The direct build is unchanged. Co-Authored-By: Claude Fable 5.1 --- slab/menuband/Info.plist | 2 +- .../Sources/MenuBand/AppDelegate.swift | 31 +++++++++---------- slab/menuband/project.yml | 2 +- 3 files changed, 17 insertions(+), 18 deletions(-) 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: -- 2.51.2