Skip to content

fix: permissions detection, Input Monitoring in popover, and app icon - #35

Merged
jatinkrmalik merged 7 commits into
mainfrom
fix/permissions-and-app-icon
Mar 5, 2026
Merged

fix: permissions detection, Input Monitoring in popover, and app icon#35
jatinkrmalik merged 7 commits into
mainfrom
fix/permissions-and-app-icon

Conversation

@jatinkrmalik

Copy link
Copy Markdown
Member

Fixes

1. Input Monitoring Permission Detection

  • Before: Input Monitoring shared accessibilityPermission status, so it always showed as denied even when granted
  • After: Separate inputMonitoringPermission property with proper detection using a CGEvent tap test
  • Re-check Permissions button now correctly detects all three permissions

2. Input Monitoring in Menu Bar Popover

  • Added Input Monitoring warning with rationale: "Required to detect hotkey presses system-wide"
  • Shows orange button to open System Settings, same style as Accessibility
  • Permissions section now shows when any of the three permissions (Mic, Accessibility, Input Monitoring) is missing

3. App Icon in Finder/Launchpad

  • Generated AppIcon.icns from logo.png (all sizes: 16x16 to 1024x1024)
  • Added CFBundleIconFile to Info.plist in build script
  • Icon now shows correctly in Finder, Launchpad, Dock, and Activity Monitor

4. Documents Folder Permission

The "access files in Documents folder" prompt is from macOS quarantine on downloaded DMGs. Not an app issue - resolved by the xattr -cr step in installation.

Permissions:
- Add proper Input Monitoring permission detection using CGEvent tap test
- Add inputMonitoringPermission property to AppState (was sharing accessibilityPermission)
- Fix SettingsView to use inputMonitoringPermission instead of accessibilityPermission
- Add Input Monitoring warning with rationale in menu bar popover
- Show permissions section when any of mic/accessibility/input monitoring is missing

App Icon:
- Generate AppIcon.icns from logo.png (all sizes 16x16 to 1024x1024)
- Add CFBundleIconFile to Info.plist in build script
- Copy icon into app bundle Resources during build
- Icon now shows in Finder, Launchpad, and Dock
- Use CGEvent.tapIsEnabled on HotKeyManager's active tap to detect revocation
- Expose activeEventTap from HotKeyManager for permission checking
- Add microphone permission rationale in popover
- Fix CGEventTapIsEnabled API for Swift compatibility
…sion

- Create a temporary event tap before opening System Settings, which
  triggers macOS to auto-add VocaMac to the Input Monitoring list
- Consolidated requestInputMonitoringPermission() in AppState
- Updated popover and settings to use the new method
Ad-hoc signed apps don't auto-register in Input Monitoring.
Updated help text to instruct users to click + and add VocaMac manually.
DMG users installing to /Applications will see VocaMac auto-registered.
Updated text to 'Enable VocaMac in the list' which works for both paths.
Add .fixedSize(horizontal: false, vertical: true) to all three permission
rationale Text views so they wrap to the next line instead of getting cut
off in the 380px-wide popover panel.
@jatinkrmalik

Copy link
Copy Markdown
Member Author

Suggested Release Notes for v0.1.0

Here are some notes to include in the release when we tag v0.1.0. These cover installation methods, permissions, and logging.


Installation

Option 1: Download DMG (Recommended)

  1. Download VocaMac.dmg from the release assets
  2. Open the DMG and drag VocaMac to Applications
  3. Right-click → Open (first launch only, to bypass Gatekeeper)
  4. If macOS quarantine blocks it: xattr -cr /Applications/VocaMac.app

Option 2: Build from Source

git clone https://github.com/jatinkrmalik/vocamac.git
cd vocamac
./scripts/build.sh
open VocaMac.app

Permissions — Important Differences

VocaMac requires three macOS permissions: Microphone, Accessibility, and Input Monitoring.

Permission DMG Install Build from Source (Terminal)
Microphone Grant to VocaMac Grant to Terminal (or iTerm2)
Accessibility Grant to VocaMac Grant to Terminal (or iTerm2)
Input Monitoring Grant to VocaMac Grant to Terminal (or iTerm2)

Why the difference? When built from source, the app runs as a child process of your terminal. macOS assigns permissions to the parent process (Terminal/iTerm2), not the app itself. With the DMG, VocaMac runs standalone so permissions are granted directly to it.

Note: Input Monitoring requires an app restart after granting the permission for VocaMac to detect it.

Logging

VocaMac logs diagnostic info to stdout with prefixed tags like [WhisperService], [AudioEngine], [HotKeyManager], etc.

  • DMG users: Logs are visible via Console.app (search for "VocaMac")
  • Source build users: Logs appear directly in your terminal

There is no persistent log file at this time. If reporting issues, please run from terminal to capture logs:

open VocaMac.app 2>&1 | tee vocamac.log

Latest commit cf44348 fixes permission rationale text truncation in the popover.

Use the same tagline from README and website:
'Your voice, your Mac, your privacy. Open-source dictation powered by AI.'
@jatinkrmalik
jatinkrmalik merged commit d6ad62c into main Mar 5, 2026
1 check passed
@jatinkrmalik
jatinkrmalik deleted the fix/permissions-and-app-icon branch August 22, 2026 05:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant