swift로 녹음 기능을 구현하기 위해서는 일단 마이크 권한을 요청해야 한다.
먼저, xcode에서 info.plist에,
혹은 xcode > 프로젝트에서 target 선택 > info
에서 다음과 같이 입력한다.

Privacy - Microphone Usage Description
오른편에는 마이크 권한 요청 사유에 대해 설명을 작성해주면 된다.
그 다음으로는 AVAudioApplication class의 func을 이용하여 권한을 요청하거나 현재 권한을 확인할 수 있다.
이전에는 AudioSession 내 requestrecordpermission이라는 func을 통해서 권한을 요청했었다.
그러나 이건 현재는 deprecated되었고 관련 설정이나 확인은 AVaudioApplication에서 담당하게 되었다.
AVAudioApplication은 shared라는 기본 싱글톤 객체를 제공한다.
현재 오디오 권한은 AVAudioApplication.shared.recordPermission으로 확인해볼 수 있다.
이 recordPermission은 enum으로 크게 3가지 종류로 정의되어 있다.
denied, granted, undetermined
각 상태를 체크하는 func을 다음과 같이 만들 수 있다.
func checkRecordPermission() -> Bool {
let audioApp = AVAudioApplication.shared.recordPermission
switch audioApp {
case .denied:
print("녹음 권한이 거부되었습니다.")
return false
case .granted:
print("녹음 권한이 승인되었습니다.")
return true
case .undetermined:
requestRecordPermission()
return false
@unknown default:
print("error: 권한을 알수없는 상태입니다.")
requestRecordPermission()
return false
}
}
위에서는 undetermined 상태일 때만 권한을 요청하도록 설정을 했다.
권한 요청은 AVAudioApplication의 (void)requestRecordPermissionWithCompletionHandler:(void (^)(BOOL granted))response;을 통해 요청할 수 있다.
기본적으로 이 때 Bool 타입 값을 반환하여, 이를 기준으로 이벤트를 관리할 수 있도록 handler를 제공한다.
예시로 설명하자면
func requestRecordPermission() {
AVAudioApplication.requestRecordPermission() { granted in
if granted {
print("녹음 권한이 승인되었습니다")
} else {
print("녹음 권한이 거부되었습니다")
}
}
}
선언 자체는 requestRecordPermission() {} 로 호출하고,
이게 granted가 되었다면 true값을 반환해주기 때문에 권한이 승인되었을 때 처리와,
거절되었을 때 처리를 따로 해줄 수 있다.
AVaudioSession requestrecordpermission document
AVaudioApplication requestrecordpermission