From db5a1f29e7f0a1d29b335ffbc28690caa03a7438 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Feb 2026 03:44:39 +0000 Subject: [PATCH] Fix macOS microphone permission registration Instantiate AVCaptureSession when requesting audio permissions to ensure the app properly registers in System Settings > Privacy & Security > Microphone. This fix addresses the issue where RustDesk was not appearing in the microphone permissions list on macOS. Co-authored-by: rustdesk <71636191+rustdesk@users.noreply.github.com> --- flutter/macos/Runner/MainFlutterWindow.swift | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/flutter/macos/Runner/MainFlutterWindow.swift b/flutter/macos/Runner/MainFlutterWindow.swift index 1cc72419b..a0b292a51 100644 --- a/flutter/macos/Runner/MainFlutterWindow.swift +++ b/flutter/macos/Runner/MainFlutterWindow.swift @@ -210,6 +210,29 @@ class MainFlutterWindow: NSWindow { } case "requestRecordAudio": AVCaptureDevice.requestAccess(for: .audio, completionHandler: { granted in + if granted { + // Actually instantiate an audio device to ensure macOS registers the app + // in System Settings > Privacy & Security > Microphone + if let audioDevice = AVCaptureDevice.default(for: .audio) { + do { + let audioInput = try AVCaptureDeviceInput(device: audioDevice) + let captureSession = AVCaptureSession() + captureSession.beginConfiguration() + if captureSession.canAddInput(audioInput) { + captureSession.addInput(audioInput) + } + captureSession.commitConfiguration() + // Start and immediately stop the session to trigger registration + captureSession.startRunning() + // Stop after a brief moment to ensure registration is complete + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + captureSession.stopRunning() + } + } catch { + NSLog("[RustDesk] Error creating audio capture session for permission registration: %@", error.localizedDescription) + } + } + } DispatchQueue.main.async { result(granted) }