목차
CoreLocation의 위치정보를 기반으로 하는 앱을 만들고 있다.
문서에서 필요한 정보만 보면서 앱을 만들었는데, 완성이 다가올 수록 부족한 부분이 보였다.
그 동안 CoreLocation이라는 프레임워크를 정복하지 못했다는 찜찜함이 있었는데, 이번 기회를 통해 문서를 찬찬히 읽어나가보려고 한다.
시작은 CoreLocation이 무엇인지, 그리고 주 목적인 현재 위치정보를 요청하는 것이다.
CoreLocation이 뭐야?
CoreLocation은 위치정보와 그와 관련된 방향, 고도, 속도 등을 제공해주는 애플의 프레임워크다.
CoreLocation으로 뭘 할 수 있는데?
정리하자면 내비게이션, 주변의 특정 지역 확인, 지도에 위치 표시, 타인과 위치 공유, 동선 추적 등의 기능을 돕는 API를 제공해준다.
https://developer.apple.com/documentation/corelocation/getting_the_current_location_of_a_device
Getting the current location of a device | Apple Developer Documentation
Start location services and provide information the system needs to optimize power usage for those services.
developer.apple.com
CoreLocation을 통해서 현재 위치 정보인 CLLocation 받아오기
금강산도 식후경, CoreLocation을 사용하는 주된 목적인 위치정보를 받아보려고 한다.
위치 정보에 접근하기 위해선 이용 권한이 필요하다.
방법은 아래 글에 정리해두었으니 여유가 있다면 보고 오시길 권장한다.
CoreLocation) 위치정보 이용에 필요한 승인 권한 요청(사용중, 항상)
CoreLocation을 사용하며 위치정보를 이용하기 위해 권한이 필요하다. 애플의 문서에 따르면 위치 데이터는 민감하고 앱 사용자의 개인정보 보호에 영향을 미치기 때문에 섬세한 요청 방식을 요구
yahoth.tistory.com
위치정보 이용 권한을 요청하여 승인 받았다면 현재의 위치 정보를 받을 준비가 됐다.
CLLocationManager 인스턴스를 통해 "requestLocation"를 호출하면 CLLocationManager의 delegate에서 "didUpdateLocations" 메소드가 호출된다. 해당 메소드에는 locations라는 CLLocation의 인스턴스를 파라미터로 주고 이를 출력해본 결과 아래와 같은 몇몇 정보들을 확인할 수 있다.
여기서 핵심은 <> 안의 좌표이다. 시뮬레이터에 미리 설정된 임의의 좌표를 얻은 것이다.
import CoreLocation
class LocationManager: NSObject {
let locationManager = CLLocationManager()
override init() {
super.init()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
}
func printCurrentLocation() {
locationManager.requestLocation()
}
}
extension LocationManager: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print(locations)
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print(error)
}
}
받아온 CLLocation 인스턴스 바라보기
위에서 requestLocation을 호출하여 CLLocationManager의 delegate에서 "didUpdateLocations" 메소드를 호출했었다.
호출된 "didUpdateLocations" 메소드를 보면 locations라는 CLLocation배열을 파라미터로 가지고 있다.
requestLocation 메소드는 현재 위치, 즉 단수를 보여줬는데 왜 배열이지? 라는 생각으로 문서를 들여다봤다.
정리하자면 배열의 마지막 location 데이터를 사용하면 된다.
보통 배열 안에 하나의 location을 가지는데, 혹여 몇몇 문제가 발생해서 여러 location을 갖더라도 배열의 마지막 데이터를 사용하면 된다고 한다. (이 사실은 블로깅 전까지 모르고 그냥 썼는데 이 맛에 문서 파헤치기 하나 싶다.)
CLLocation 인스턴스는 위치정보, 속도 및 코스 정보와 위치를 받아올 때의 정확성에 대한 정보들을 포함한다.
CLLocation 클래스의 프로퍼티
'Swift' 카테고리의 다른 글
CoreLocation) 위치 데이터의 정확성에 대한 고찰 (0) | 2024.02.16 |
---|---|
CoreLocation) 문서 공부2 (CLLocationManager) (4) | 2024.02.06 |
CoreLocation) 위치정보 이용 관련 시뮬레이터 활용방법 (2) | 2024.02.01 |
CoreLocation) 위치정보 이용에 필요한 승인 권한 요청(사용중, 항상) (0) | 2024.02.01 |
Realm - Updating UITableView 관련 이슈 및 해결(Xcode 이슈) / 이게 되네.. (0) | 2024.01.16 |