v0.5.4 — First-launch reliability + Accessibility upgrade recovery
First-launch reliability + Accessibility upgrade recovery
The one-time welcome window no longer requires Accessibility permission to appear — anyone stuck on the v0.4.x → v0.5.x upgrade transition (where the notarized signature invalidates the previous TCC grant and the toggle in System Settings keeps reading false) now sees the welcome on first launch like everyone else. The tccutil reset rescue command is also visible from the moment the onboarding window opens, so a stuck install is no longer hidden two clicks deep.
What's new
- Welcome window decoupled from Accessibility.
AppDelegate.showFirstLaunchWelcomeIfNeeded()no longer checkspermissionGranted. Welcome shows on first launch regardless of permission state. After the user dismisses it,FirstLaunchWindowController.afterDismisschains into the AX onboarding window if Accessibility is still missing — first-time users go welcome → AX prompt without having to fish in the menu bar. tccutil resetrescue hint shown upfront.OnboardingViewno longer gates the recovery block (with the Copy button + paste-into-Terminal instructions) behind a failed "Check again" click. Most users grant in System Settings and let the 2-second polling timer pick it up — they never click Check again, so they never discovered the rescue path. Always-visible now.- Returning users without AX get the prompt automatically. When the welcome flag is already set but
AXIsProcessTrustedreturns false,AppDelegate.applicationDidFinishLaunchingnow callsopenOnboardingIfMissingAX(). Users with a broken TCC grant don't have to discover the hidden "Grant Accessibility" item in the menu bar to recover.
Why this matters
V0.5.0 introduced Apple notarization, which is the right long-term move (Gatekeeper accepts the install, future v0.5.x → v0.5.y updates preserve the AX grant). But the one-time transition from ad-hoc-signed v0.4.x to notarized v0.5.x changes the binary's cdhash and signing identity, so the existing TCC entry's csreq no longer matches. macOS keeps the toggle in System Settings ON, but AXIsProcessTrusted() returns false. Users in this state would never see the new welcome window, and the documented tccutil reset workaround was hidden behind a button click most of them never made. V0.5.4 surfaces both.
Under the hood
SceneApp/SceneApp/OnboardingView.swift— removed thecheckAttempts >= 1gate around the rescue block; window height fixed at 500.SceneApp/SceneApp/FirstLaunch/FirstLaunchWindowController.swift— newafterDismiss: () -> Voidcallback fired by both buttons.SceneApp/SceneApp/AppDelegate.swift— welcome no longer gated onpermissionGranted; newopenOnboardingIfMissingAX()helper called both from welcome'safterDismissand fromapplicationDidFinishLaunching(returning-user path).- No SceneCore changes. 177/177 unit tests still pass.
- Hardened runtime, Developer ID signed, Apple notarized.
Install
Homebrew (recommended):
brew upgrade --cask scene # existing users
brew install --cask chifunghillmanchan/tap/scene # new users
DMG: download Scene-0.5.4.dmg below, double-click, drag into Applications. Universal binary — works on Apple Silicon and Intel.
Upgrade notes
- Existing v0.5.x users: your Accessibility grant survives this upgrade automatically. The in-app "Update available" menu item will surface this release within 24 hours of its publication; click it to download.
- Upgrading from v0.4.3 or earlier: the cdhash changes in the v0.5.0 transition still apply — re-grant Accessibility once, then the rest of the v0.5.x line preserves it. The new always-visible rescue hint inside the onboarding window has the exact
tccutil resetcommand if your previous grant gets stuck.