Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Xcode
- 리펙터링
- UITextView
- SWIFT
- uitableview
- RxCocoa
- 리팩토링
- Observable
- MVVM
- ribs
- Clean Code
- clean architecture
- ios
- Protocol
- Human interface guide
- swift documentation
- tableView
- combine
- collectionview
- UICollectionView
- 스위프트
- rxswift
- swiftUI
- 클린 코드
- Refactoring
- 리펙토링
- map
- 애니메이션
- HIG
- uiscrollview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 4. Observable로 Wrapping하여 권한 요청) RxSwift의 concat을 이용하여 순서대로 권한 요청 방법 본문
iOS 응용 (swift)
[iOS - swift] 4. Observable로 Wrapping하여 권한 요청) RxSwift의 concat을 이용하여 순서대로 권한 요청 방법
jake-kim 2022. 1. 7. 00:331. Observable로 Wrapping하여 권한 요청) 위치 권한, 실시간 위치 정보 획득
2. Observable로 Wrapping하여 권한 요청) 사진 권한, 카메라 권한
3. Observable로 Wrapping하여 권한 요청) 마이크 권한, ATT(App Tracking Transparency) 권한
4. Observable로 Wrapping하여 권한 요청) RxSwift의 concat을 이용하여 순서대로 권한 요청 방법
아이디어
- 권한 설정코드들을 Observable로 wrapping
- RxSwift의 concat연산자를 활용하여 Observable들을 순서대로 방출
- Observable로 Wrapping하는 방법이 나와있는 위 Observable로 Wrapping, 1 ~ 3번 글 확인
세팅
- 프레임워크
pod 'RxSwift' pod 'RxCocoa' pod 'RxCoreLocation'
- info.plist
<key>NSUserTrackingUsageDescription</key>
<string>개인에게 최적화된 광고를 제공하기 위해 사용자의 광고 활동 정보를 수집합니다.</string>
<key>NSMicrophoneUsageDescription</key>
<string>~ 마이크 권한이 필요합니다.</string>
<key>NSCameraUsageDescription</key>
<string>~ 카메라 권한이 필요합니다.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>~ 사진 권한이 필요합니다.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>~ 위치 권한이 필요합니다.</string>
<key>UIApplicationSceneManifest</key>
Permission 요청 코드 추가
- 1 ~ 3번 글 확인하여 각 PermissionManager 구현
ex) PhotoPermssionManager 코드
import RxSwift
import RxCocoa
import Photos
class PhotoPermissionManager {
static let shared = PhotoPermissionManager()
private init() {}
func requestPhoto() -> Observable<PHAuthorizationStatus> {
Observable<PHAuthorizationStatus>.create { observable in
PHPhotoLibrary.requestAuthorization {
observable.onNext($0)
observable.onCompleted()
}
return Disposables.create()
}
}
}
- 사용할 때 RxSwift의 Concat을 사용하여 연속적으로 권한을 요청하도록 구현
// ViewController.swift
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
private let disposeBag = DisposeBag()
@IBAction func didTapButton(_ sender: Any) {
Observable.concat(
LocationPermissionManager.shared.requestLocation().map { _ in Void() },
PhotoPermissionManager.shared.requestPhoto().map { _ in Void() },
CameraPermissionManager.shared.requestCamera().map { _ in Void() },
MicPermissionManager.shared.requestMic().map { _ in Void() },
ATTPermissionManager.shared.requestATT().map { _ in Void() }
)
.bind(onNext: { print("finish") })
.disposed(by: self.disposeBag)
}
}
'iOS 응용 (swift)' 카테고리의 다른 글
Comments