반응형
해당 글은 SwiftUI 내에서 카메라와 음성에 대한 권한을 요청하는 팝업에 대해서 사용하는 방법에 대해서 공유합니다.
0) 개발 환경
구분 | 구분 종류 | 버전 |
언어 | Swift | 5.7.2 |
개발 환경 | IOS | 16.2 |
UI Interface | SwiftUI | |
개발 도구 | XCode | 14.2 |
1) 설정 환경 이해하기
💡 Xcode 13 버전부터 Info.plist 파일이 사라졌습니다.
파일로 관리하는것이 아닌 Info - Target 탭 내에서 이를 변경할 수 있습니다.
💡Info.plist 란?
- Info.plist 파일은 iOS 앱의 설정 정보를 포함하는 파일입니다. 이 파일은 앱의 기본 정보, 권한 및 기능, 앱 아이콘 및 스플래시 화면, 사용자 정의 URL 스키마 등을 지정하는 데 사용됩니다. Info.plist 파일은 Xcode에서 편집할 수 있으며, 앱 번들의 루트 디렉터리에 저장됩니다.
2) 설정하기
1. 프로젝트 - TARGETS - info 탭을 선택합니다.
2. 카메라와 음성에 대한 권한을 추가합니다.
권한 종류 | Key | Type | Value |
카메라 | Privacy - Camera Usage Description | String | A message that tells the user why the app is requesting access to the device’s camera. |
마이크 | Privacy - Microphone Usage Description | String | A message that tells the user why the app is requesting access to the device’s microphone. |
[더 알아보기]
💡 Custom iOS Target Properties
- iOS 앱의 Info.plist 파일에 추가적인 속성을 정의할 수 있도록 합니다.
Key : 속성의 이름을 작성합니다. (예: NSCameraUsageDescription)
Type : 속성의 타입을 선택합니다. (예: String)
Value : 속성에 대한 값 또는 설명을 작성합니다.
- 이 속성을 사용하면 앱에서 권한을 요청하거나, 앱에서 사용하는 기능에 대한 설명을 제공할 수 있습니다.
3. 코드 내에서 권한 요청합니다.
💡 권한을 관리하는 클래스를 구성합니다.
import AVFoundation
class PermissionManager : ObservableObject {
@Published var permissionGranted = false
/**
* 카메라 권한을 요청합니다.
*/
func requestCameraPermission() {
AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
if granted {
print("Camera: 권한 허용")
} else {
print("Camera: 권한 거부")
}
})
}
/**
* 오디오 권한을 요청합니다.
*/
func requestAudioPermission(){
AVCaptureDevice.requestAccess(for: .audio, completionHandler: { (granted: Bool) in
if granted {
print("Audio: 권한 허용")
} else {
print("Audio: 권한 거부")
}
})
}
}
💡 UI가 화면에 노출이 되는 onAppear 시점에 두개의 권한요청 팝업을 띄웁니다.
struct SessionView: View {
@StateObject var permissionManager = PermissionManager()
@Binding var userId : String
@Binding var roomNo : String
func viewDidLoad(){
}
var body: some View {
VStack {
if permissionManager.permissionGranted {
//show a conditional view only if you have permission
}
Text("SessionView Page입니다.")
Text("사용자 아이디 : \\(userId) \\n 방 번호 : \\(roomNo) ")
.frame(width: 300, height: 200)
}
.onReceive(permissionManager.$permissionGranted, perform: { (granted) in
if granted {
//show image picker controller
}
})
.onAppear {
permissionManager.requestCameraPermission()
permissionManager.requestAudioPermission()
}
}
}
[더 알아보기]
💡 onAppear() 란?
onAppear 메소드는 View가 화면에 나타날 때 호출됩니다. 이 메소드를 사용하여 View가 화면에 표시되기 전에 초기화 작업을 수행하거나 데이터를 로드할 수 있습니다.
💡 onReceive() 란?
onReceive 메소드는 SwiftUI에서 ObservableObject를 사용하여 데이터를 관찰하는 데 사용됩니다. ObservableObject를 사용하면 데이터 변경을 알림받아 UI를 업데이트할 수 있습니다. onReceive 메소드는 이러한 데이터 변경 알림을 수신하기 위해 사용됩니다.
오늘도 감사합니다. 😀
반응형
'Swift > 이해하기' 카테고리의 다른 글
[Swift] SwiftUI에서 Storyboard(UIKit) 화면을 불러오는 방법 : UIViewControllerRepresentable (0) | 2023.03.06 |
---|---|
[Swift] 서버와 IOS 모바일 API 통신 방법 : URLSession, Alamofire (0) | 2023.02.28 |
[Swift] TextField의 포커싱 방법 : @FocusState (0) | 2023.02.23 |
[Swift] 페이지 이동 및 데이터 전달방법 : NavigationView, NavigationLink, @State, @Binding (0) | 2023.02.23 |
[Swift] ImageSet & ColorSet 구성 및 불러오기 방법 : + Hex Color (0) | 2023.02.22 |