Add first-launch onboarding wizard for permissions - #46
Open
mcnahum wants to merge 2 commits into
Open
Conversation
Adds a short two-step "Welcome & Permissions" wizard shown on first launch: it plainly explains why Screen Recording is the one required permission, then lets the user grant it in place with a live status label. It's also reachable any time from the menu bar, separate from the existing quick "Check Permissions" status dialog. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 53cfe816-d51f-4038-80d5-d2fad9f0c22e
Author
|
Closing for now — still iterating locally before resubmitting. |
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a first-launch onboarding wizard (AppKit) to explain and guide granting Screen Recording permission, and wires it into the app’s first-run flow and menu so users aren’t dropped into a silent menu-bar-only launch.
Changes:
- Introduces
PermissionsWizardWindowControllerwith a two-page Welcome → Screen Recording grant flow and status refresh on app reactivation. - Updates first-launch behavior to show the wizard (instead of opening Settings) and adds a “Welcome & Permissions…” menu entry.
- Updates README to document the new first-launch permissions flow.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| Sources/ZoomItMacCore/Permissions/PermissionsWizardWindowController.swift | Adds the new two-step permissions wizard window UI and reactivation-based status refresh. |
| Sources/ZoomItMacCore/App/AppDelegate.swift | Shows the wizard on first launch and adds a menu entry to open it. |
| Sources/ZoomItMacCore/App/AppController.swift | Adds showPermissionsWizard() and holds a lazy wizard controller instance. |
| README.md | Documents the updated first-launch permissions experience and menu entry. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+110
to
+114
| let body = makeBodyLabel(""" | ||
| Click Grant Screen Recording to open the macOS permission prompt. If you've \ | ||
| already responded to it before, this instead opens System Settings so you can \ | ||
| turn it on there. | ||
|
|
Comment on lines
+14
to
+17
| private var backButton: NSButton? | ||
| private var primaryButton: NSButton? | ||
| private var statusLabel: NSTextField? | ||
| private var grantButton: NSButton? |
Comment on lines
+137
to
+139
| private func grantButtonTitle(granted: Bool) -> String { | ||
| granted ? "Open Screen Recording Settings…" : "Grant Screen Recording…" | ||
| } |
- Split the wizard into three pages: Screen Recording explanation, Microphone/Camera (optional) explanation, and the grant step. Body labels now size themselves to their actual text instead of using a fixed height, so long copy is never clipped. - Screen Recording's grant is cached per-process by macOS, so the wizard can't detect a new grant in-process. It now auto-relaunches ZoomIt when the user switches back after granting, with a manual "Relaunch ZoomIt Now" fallback button. - Replaced the separate "Welcome & Permissions…" menu entry with a "Run Welcome…" button inside the Check Permissions dialog. - The Check Permissions dialog now shows "Granted" in green for each permission that's been granted, via a custom attributed accessory view (NSAlert.informativeText can't color individual words. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> EOF )
Author
|
Updated based on further testing/feedback:
|
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
Adds a small, clean onboarding wizard for permissions with two goals:
Where it shows up
Implementation
PermissionsWizardWindowController(AppKit, matching the existing code style — no new UI framework/dependency) with two pages and Back/Continue/Finish navigation.AppController(newshowPermissionsWizard()) andAppDelegate(first-launch trigger + new menu entry).Testing
swift buildsucceeds with no new warnings.Scripts/build-app.sh+Scripts/reset-first-run.sh: wizard appears on first launch, Continue/Back navigate between pages, Finish closes the window, and the app remains running as a menu-bar-only accessory afterward.