When requesting authorisation to gain access to the user's microphone in the visionOS 2.4 simulator, the simulator crashes upon the user clicking allow. Using Swift 6, code below.
Bug Report: FB17667361
@MainActor
private func checkMicrophonePermission() async {
logger.debug("Checking microphone permissions...")
// Get the current permission status
let micAuthStatus = AVAudioApplication.shared.recordPermission
logger.debug("Current Microphone permission status: \(micAuthStatus.rawValue)")
if micAuthStatus == .undetermined {
logger.info("Requesting microphone authorization...")
// Use structured concurrency to wait for permission result
let granted = await withCheckedContinuation { continuation in
AVAudioApplication.requestRecordPermission() { allowed in
continuation.resume(returning: allowed)
}
}
logger.debug("Received microphone permission result: \(granted)")
// Convert to SFSpeechRecognizerAuthorizationStatus for consistency
let status: SFSpeechRecognizerAuthorizationStatus = granted ? .authorized : .denied
// Handle the authorization status
handleAuthorizationStatus(status: status, type: "Microphone")
// If granted, configure audio session
if granted {
do {
try await configureAudioSession()
} catch {
logger.error("Failed to configure audio session after microphone authorization: \(error.localizedDescription)")
self.isAvailable = false
self.processingError = .audioSessionError(description: "Failed to configure audio session after microphone authorization")
}
}
} else {
// Convert to SFSpeechRecognizerAuthorizationStatus for consistency
let status: SFSpeechRecognizerAuthorizationStatus = (micAuthStatus == .granted) ? .authorized : .denied
handleAuthorizationStatus(status: status, type: "Microphone")
// If already granted, configure audio session
if micAuthStatus == .granted {
do {
try await configureAudioSession()
} catch {
logger.error("Failed to configure audio session for existing microphone authorization: \(error.localizedDescription)")
self.isAvailable = false
self.processingError = .audioSessionError(description: "Failed to configure audio session for existing microphone authorization")
}
}
}
}