CoreLocation 현재위치 가져오기

‍csk·2022년 11월 13일
0

Swift

목록 보기
5/6

0. import CoreLocation

import CoreLocation

1. CLLocationManager() 선언

Apple Documentation CLLocationManager

private let locationManager: CLLocationManager = {
        let manager = CLLocationManager()
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.startUpdatingLocation()
        return manager
    }()

1. desiredAccuracy

앱이 수신하고자 하는 위치 데이터의 정확성.

  • 덜 정확해도 괜찮은 정보라면 정확도를 낮춰서 자원을 절약하자.
  • 정확하게 달라해도 비정확한 정보를 줄 수 있지만, 곧 정확한 정보를 줄거라고한다.
  • 위치 정보 권한이 없으면 효과가 없다.
  • 다음과 같은 정확도 순서를 갖는 것 같다.

정확도

  1. kCLLocationAccuracyBest -> 제일 정확
  2. kCLLocationAccuracyBestForNavigation
  3. kCLLocationAccuracyNearestTenMeters
  4. kCLLocationAccuracyHundredMeters
  5. kCLLocationAccuracyKilometer
  6. kCLLocationAccuracyThreeKilometers
  7. kCLLocationAccuracyReduced -> 제일 비정확 (1~20Km 수준의 정확도)

2. startUpdatingLocation()

사용자의 현재 위치를 보고하는 업데이트 생성을 시작합니다.

stopUpdatingLocation() : 그만 보고해
requestLocation() : 한번 해줘

3. requestWhenInUseAuthorization()

앱이 사용 중인 동안 위치 서비스를 사용할 수 있는 사용자의 허가를 요청합니다.

위치 권한

1. requestWhenInUseAuthorization()

앱이 사용 중인 동안 위치 서비스를 사용할 수 있는 사용자의 허가를 요청합니다.

locationManager.requestWhenInUseAuthorization()

1-1. requestAlwaysAuthorization()

백그라운드 상황에서도 위치 정보가 필요한 경우 ( 네비게이션 등 ) 항상 허용을 해야한다.

requestAlwaysAuthorization()

2. info.plist 수정

다음과 같이 수정한다.

수정하면 다음과 같이 권한 요청이 뜬다.

  • 앱 사용중에만 요청한 경우 ( requestWhenInUseAuthorization() )

3. 권한 확인하기

var authorizationStatus: CLAuthorizationStatus { get }
  1. authorizedWhenInUse : 앱을 사용하는 동안 허용
  2. authorizedAlways : 언제든지 허용
  3. notDetermined : 결정장애
  4. restricted : 권한 없음
  5. denied : 거절
switch locationManager.authorizationStatus {
            case .authorizedWhenInUse, .authorizedAlways:
                print("권한 있음")
            case .notDetermined, .restricted, .denied:
                print("권한 없음")
                locationManager.requestWhenInUseAuthorization()
            default:
                break;
        }

delegate

locationManager.delgate = self

인증 변경에 대응하기

func locationManagerDidChangeAuthorization(CLLocationManager)

오류 처리

func locationManager(CLLocationManager, didFailWithError: Error)

⭐️ 위치 업데이트 받기 ⭐️

  • func locationManager(CLLocationManager, didUpdateLocations: [CLLocation])
    • 새로운 위치 데이터 사용 가능하다고 알려줌
  • func locationManager(_:didUpdateTo:from:) Deprecated
extension ViewController: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.last else { return }
        print("longitude : ",location.coordinate.longitude)
        print("latitude : ",location.coordinate.latitude)
    }
}

시뮬레이터 위치 변경하기

Features -> Location -> Custom Location..37, -122로 변경결과
profile
Developer

1개의 댓글

comment-user-thumbnail
2022년 11월 14일

지렸다 ㄷㄷ

답글 달기