Skip to content

v0.5.4 — First-launch reliability + Accessibility upgrade recovery

Choose a tag to compare

@ChiFungHillmanChan ChiFungHillmanChan released this 23 Apr 20:45
· 21 commits to main since this release

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 checks permissionGranted. Welcome shows on first launch regardless of permission state. After the user dismisses it, FirstLaunchWindowController.afterDismiss chains 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 reset rescue hint shown upfront. OnboardingView no 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 AXIsProcessTrusted returns false, AppDelegate.applicationDidFinishLaunching now calls openOnboardingIfMissingAX(). 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 the checkAttempts >= 1 gate around the rescue block; window height fixed at 500.
  • SceneApp/SceneApp/FirstLaunch/FirstLaunchWindowController.swift — new afterDismiss: () -> Void callback fired by both buttons.
  • SceneApp/SceneApp/AppDelegate.swift — welcome no longer gated on permissionGranted; new openOnboardingIfMissingAX() helper called both from welcome's afterDismiss and from applicationDidFinishLaunching (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 reset command if your previous grant gets stuck.