-
[iOS] Core Loaction 위치 권한 설정하기/iOS 📱 2022. 4. 26. 23:57반응형
안녕하세요 !
오늘은 위치 정보가 필요할 때 위치 권한을 얻는 방법을 공부해보겠습니다
iOS 13 기준으로 설명드릴게요
++ 추가 2024.01.19 (금)
iOS 13에서 deprecated 된 방식 이외에 iOS 14에서 사용하는 프로퍼티와 메소드 추가
권한상태를 쉽게 출력할 수 있는 extension 추가
공식 문서로 자세하게 찾아보겠습니다.
1. 위치 정보를 받기 전에 requestAlwaysAuthorization() 혹은 requestWhenInUseAuthorization() 메소드를 꼭 호출해야한다고합니다.
2. Info.plist 파일에 key를 추가해줘야한다네요.
3.
권한 요청에 대한 사용자의 인터렉션은 CLLocationManager 의 delegate를 위임 받아, locationManager(_:didUpdateLocations:) 메소드를 통해서 받아볼 수 있다.3. locationManager(_:didChangeAuthorization status:) 메소드에서 authorizatioin 상태 값을 받을 수 있다.
4. 메소드를 호출 한 이후에는, 추가적으로 호출은 아무런 영향을 끼치지않는다.
authorizationStatus 알아보기
authorizationStatus는 CLAuthorizationStatus 를 인스턴스 프로퍼티로 사용하고 있다,
notDetermined : 위치 권한을 요청받지 않음
restrict : 설정에서 사용자가 모든 앱이 위치 설정을 사용할 수 없게 설정
denied : 사용자가 위치 정보를 해당 앱이 접근하는 것을 거부
authorizedAlways : 사용자가 해당 앱이 백그라운드에서도 위치 정보에 접근할 수 있도록 허용
authorizedWhenInUse : 사용자가 해당 앱이 포그라운드에서 위치 정보에 접근할 수 있도록 허용
ㅁㅁ
이제 코드를 통해 어떻게 사용하는지 알아보겠습니다.
1. iOS 13 이전
과거에 작성했던 타입메소드를 통해 권한상태를 확인하는 방법은 iOS13에서 deprecated 되었습니다.
//CLLocationManager 객체 생성 let locationManager = CLLocationManager() locationManager.delegate = self // CLLocationManager.authorizationStatus() was deprecated in iOS14.0 // Use the instance property authorizationStatus instead. switch CLLocationManager.authorizationStatus() { case .denied: // 위치 정보 권한 요청하기 self.locationManager.requestAlwaysAuthorization() break case .notDetermined, .restricted: break default: break }
2. iOS 14 이후
iOS 14.0 부터는 인스턴스 프로퍼티인 authorizationStatus 를 사용합니다.
권한이 바뀐 것 또한 func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) 를 사용해서 확인이 가능합니다.
extension MainViewController2: CLLocationManagerDelegate { func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) { print("Location AuthorizationStatus: \(manager.authorizationStatus)") switch manager.authorizationStatus { case .notDetermined: break case .restricted: break case .denied: break case .authorizedAlways: break case .authorizedWhenInUse: break @unknown default: break } } }
manager.authorizationStatus 권한에 대해서 print()를 이용하면 열거형의 rawValue가 나와서 상태권한을 확인하는데 불편함이 있습니다.
protocol 인 CustomStringConvertible 을 이용하면 권한에 따른 String 값을 편하게 확인할 수 있습니다.
* CustomStringConvertible를 채택하면 은 print() 메소드가 인스턴스의 custom description 프로퍼티를 사용합니다
extension CLAuthorizationStatus: CustomStringConvertible { public var description: String { switch self { case .notDetermined: return "notDetermined" case .restricted: return "restricted" case .denied: return "denied" case .authorizedAlways: return "authorizedAlways" case .authorizedWhenInUse: return "authorizedWhenInUse" case .authorized: return "authorized" @unknown default: return "restricted" } } }
' > iOS 📱' 카테고리의 다른 글
[iOS] 디바이스의 정보를 알아보자 UIDevice - UUID (1) (0) 2022.05.14 [iOS] 동적 테이블 뷰 셀(UITableView Dynamic cell height) 만들기 (estimatedRowHeight, autoDimension) (0) 2022.05.01 [iOS] ViewController의 생명주기 (Life-Cycle) (0) 2022.04.25 [iOS]UIButton underline 설정하기 (0) 2022.04.22 [SwiftUI] iPad로도 앱을 만들 수 있을까 ? (0) 2022.02.22