Description
Users experience two critical issues with permissions:
Issue 1: Repeated Audio Recording Permission Prompts (3x)
When pressing the hotkey to record, users are prompted 3 times to grant audio recording access, even after:
- Previously granting access
- Double-checking System Settings → Privacy & Security → Microphone
- Restarting the application
This prompt appears every single time they attempt to record, making the recording experience broken.
Issue 2: SmartPaste Always Fails
SmartPaste functionality is completely broken. Even after:
- Granting Accessibility permission in System Settings → Privacy & Security → Accessibility
- Enabling SmartPaste in AudioWhisper settings
- Restarting the application
- Manually re-adding AudioWhisper to Accessibility list
SmartPaste still silently fails to paste transcribed text into target applications.
Expected Behavior
- Audio permission should be requested once. After granting, it should persist and not be re-requested
- SmartPaste should work reliably after granting Accessibility permission
Actual Behavior
- User is prompted 3 times for audio access on every recording attempt
- SmartPaste fails silently with no indication that permissions are missing
Root Causes
Permission Prompts (Multiple Sites)
The app makes redundant permission requests from two independent code paths:
This creates multiple independent system prompts instead of a single consolidated request.
SmartPaste Failure
- Code Signature Issue: Ad-hoc code signing changes the app's code signature hash with each build, invalidating prior Accessibility permissions per the CLAUDE.md documentation
- Permission Check Failure:
AccessibilityPermissionManager.checkPermission() uses AXIsProcessTrustedWithOptions(nil), which fails to recognize permissions granted after the code signature changed
- No Runtime Refresh: The permission state appears to be checked only at startup, not dynamically
Steps to Reproduce
For Issue 1 (Permission Prompts)
- First time: Grant audio access when prompted
- Press the hotkey to record again
- Observe: Prompted 3 times again (even though permission was just granted)
For Issue 2 (SmartPaste)
- Enable SmartPaste in Settings
- Grant Accessibility permission in System Settings
- Return to AudioWhisper and attempt to record something
- After transcription completes, observe that text is not pasted into the target application
Suggested Solutions
Issue 1: Consolidate Permission Requests
- Unify all microphone permission requests through
PermissionManager
- Remove independent permission requests from
AudioRecorder
- Ensure only one
AVCaptureDevice.requestAccess() call occurs per permission cycle
Issue 2: Fix SmartPaste Permission Check
- Add a runtime permission refresh mechanism to detect dynamically-granted permissions
- Consider using
AXIsProcessTrustedWithOptions([kAXTrustedCheckOptionPrompt: true]) to properly validate permissions after code signature changes
- Implement fallback permission request if check fails
- Add user-friendly error messages explaining the code-signing / permission requirement
General Recommendation
- Add logging to track which permission request flows are being triggered
- Consider adding a "Verify Permissions" button in Settings for manual refreshes
- Display clear guidance when permissions are missing or need re-granting
Related Documentation
See CLAUDE.md section "Accessibility Permission (SmartPaste)" - describes that code signature changes with each build invalidate Accessibility permissions and require manual re-granting.
Description
Users experience two critical issues with permissions:
Issue 1: Repeated Audio Recording Permission Prompts (3x)
When pressing the hotkey to record, users are prompted 3 times to grant audio recording access, even after:
This prompt appears every single time they attempt to record, making the recording experience broken.
Issue 2: SmartPaste Always Fails
SmartPaste functionality is completely broken. Even after:
SmartPaste still silently fails to paste transcribed text into target applications.
Expected Behavior
Actual Behavior
Root Causes
Permission Prompts (Multiple Sites)
The app makes redundant permission requests from two independent code paths:
AudioRecorder.checkMicrophonePermission() (Sources/Services/Audio/AudioRecorder.swift:46-68)
AVCaptureDevice.requestAccess()when status is.notDeterminedPermissionManager.requestMicrophonePermission() (Sources/Managers/PermissionManager.swift:132-142)
AVCaptureDevice.requestAccess()againThis creates multiple independent system prompts instead of a single consolidated request.
SmartPaste Failure
AccessibilityPermissionManager.checkPermission()usesAXIsProcessTrustedWithOptions(nil), which fails to recognize permissions granted after the code signature changedSteps to Reproduce
For Issue 1 (Permission Prompts)
For Issue 2 (SmartPaste)
Suggested Solutions
Issue 1: Consolidate Permission Requests
PermissionManagerAudioRecorderAVCaptureDevice.requestAccess()call occurs per permission cycleIssue 2: Fix SmartPaste Permission Check
AXIsProcessTrustedWithOptions([kAXTrustedCheckOptionPrompt: true])to properly validate permissions after code signature changesGeneral Recommendation
Related Documentation
See
CLAUDE.mdsection "Accessibility Permission (SmartPaste)" - describes that code signature changes with each build invalidate Accessibility permissions and require manual re-granting.