fix(v2.4.1): recover from cdhash mismatch, menu bar binding label, tap-failure UX#17
Merged
Conversation
…p-failure UX Five fixes bundled into one patch release. Motivated by silent breakage when v2.4.0 binary's ad-hoc signature doesn't match the Accessibility TCC entry from a prior install: the hotkey listener never starts and nothing tells the user why. - Menu bar 'Hotkey: Hold fn' is now driven by HotKeyBindingStore and updates live when the user rebinds in Settings. - Onboarding polls permission state at 2s instead of 0.5s and stops hammering TCC. As soon as every requirement lands it auto-completes and starts the hotkey listener, so the user doesn't have to click 'Get Started' for fn to begin working. - New 'onboardingCompleted' UserDefaults flag. When set and only AX is missing on launch, show a slim ReapproveAccessibilityView (open the pane, auto-dismiss when access returns) instead of the full first-run flow. Common path on every release because each ad-hoc-signed build has a new cdhash. - HotKeyManager now posts hotKeyTapCreationFailed when CGEvent.tapCreate returns nil. MenuBarController catches that, switches to the error icon, sets the status item to 'Accessibility permission required', and turns the hotkey menu row into a clickable 'Open Accessibility Settings\u2026' shortcut. - Bump version to 2.4.1.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
v2.4.0 had a silent failure mode that hit on the first launch after every release: the ad-hoc-signed binary has a fresh cdhash, so
AXIsProcessTrustedreturns false even though the TCC entry says "granted". The app showed full onboarding, the hotkey listener never started, and the user had no signal anything was wrong — fn just did nothing.This patch addresses the root issue plus four related UX gaps in one release.
Changes
Hotkey: Hold fnwas hardcoded. Now driven byHotKeyBindingStoreand updates live when the user rebinds in Settings.TCCAccessRequest()IPCs every 500ms.onboardingCompletedUserDefaults flag. On launch: if the flag is set and only Accessibility is missing, show a smallReapproveAccessibilityView("remove + re-add AudioType in Accessibility") that auto-dismisses when access returns. No more forcing the full first-run flow after every release.HotKeyManagernow posts.hotKeyTapCreationFailedwhenCGEvent.tapCreatereturns nil.MenuBarControllercatches that, switches to the error-tinted icon, sets the status row to "Accessibility permission required", and turns the hotkey menu item into a clickable "Open Accessibility Settings…" shortcut. Replaces the previous silent failure.Verification
swift buildclean.