swift로 녹음 기능 구현 - 마이크 권한 요청하기

나우리·2024년 10월 29일

Swift

목록 보기
9/13

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

  • denied : 권한 요청을 했지만 거절된 상태
  • granted : 권한 요청을 했고, 수락된 상태
  • undeterminde : 권한 요청을 아직 하지 않은 상태

각 상태를 체크하는 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

profile
왕초보 개발일지

0개의 댓글