이번 팀 프로젝트에서 네이버 지도를 활용해보기로 했다.
날씨 어플임에도 지도를 활용해서 다양한 기능을 추가해볼 수 있을 것 같았는데,
네이버 지도를 적용하는 방법 자체가 복잡했다.
추가 업데이트
Apple Map Kit을 활용해서 지도를 적용하는 방법이 있다는 것을 알았다! 하나의 객체를 생성해서 바로바로 위치를 확인할 수 있다는 점에서 네이버 지도보다 더 좋은 방법인 것 같다. 하지만 주변 식당 + 리뷰들을 확인할 수 있도록 만들어야 하기 때문에 네이버 지도를 계속해서 시도해봐야겠다는 생각이다.
공식문서
네이버 지도 자체를 생성하는 과정은 쉽다!
먼저 네이버 지도(네이버 지도 모바일 SDK)를 사용하는 계정으로 클라이언트 ID를 발급 받아야 한다.
이후, Podfile에 네이버 맵을 상징하는 NMapsMap을 선언해야한다.
pod 'NMapsMap'
선언 이후 cocoapods를 설치하면 NMapsMap 프레임워크를 사용할 수 있게 된다!
override func viewDidLoad() {
super.viewDidLoad()
let mapView = NMFMapView(frame: view.frame)
view.addSubview(mapView)
}
위처럼 네이버 지도 객체를 바로 생성할 수 있다.
생성된 지도에 값을 주는 방법은 CLLocationManager을 사용해서 값을 줄 수 있다.
locationManager는 우리가 지도에서 일반적으로 확인할 수 있는 위도, 경도, 접근 권한 등을 다룬다. 해당 매니저를 통해 지도 객체에서 발생하는 이동 값을 확인하여 데이터를 다시 뿌려 줄 수 있다!
다만 한가지 이해 안되는 점이 있다.
locationManager이 위의 데이터 관리를 하는 객체라고 하면 어떤 원리로 locationManager와 mapView가 유기적으로 연결되는지 이해가 되지 않는다.
지도와 manager를 따로 생성해야하며 데이터는 manager에서 확인 -
업데이트는 지도로 해야하는데, 동일한 파일에서 처리를 하는 예시들을 자주 접하다보니 이해가 안되는 부분들이 계속 생겨나는 중이다.
locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
위 코드는 이제 사용이 중단된 것 같다.
따라서 대부분 블로그에서 제공하는 네이버 지도 적용 방법은 OLD한 방식!
더불어 NMFMapView와 NMFNaverMapView 2개의 지도 객체/타입이 존재해 보이는데, 이 차이점은 조금씩 정리해봐야겠다.
지금까지 확인했을 때 맵뷰와 네이버 맵뷰의 차이는 커스텀을 어디까지할 수 있는지의 차이점이라고 한다.
공식 문서상에서 MapView는 단순히 화면에 지도를 보여주는 역할만 담당한다고 한다.
반면, NaverMapView는 지도를 보여주면서 필요한 기본적인 UI가 구현되어 있다고 하는데,
한 예로 compass, direction, zoom button, location button이 내제되어 있는 상태로 바로 화면에 보여준다는 차이점이 있었다.
한가지 궁금한 점은, 네이버에서 제공하는 데모 코드는 NMFMapView를 활용하고 있었다.
NaverMapView는 커스텀이 아예 안되는 건지, 맞다면 왜 제한을 걸었는지 궁금해진다.
CLLocationManager
ios 표준 위치를 관리하는 매니저인 CLLocationManager는 iOS앱에서 활용되는 위치를 파악하고 관리하는데 사용이 된다고 한다.
NMF LocationManager
네이버 지도를 사용하기 위해 SDK에 포함된 위치 관련 매니저라고 한다.
이 매니저는 네이버 지도를 통해 위치를 파악하고 지도 위에 표시하는 것에 특화 되어 있다고 하는데, 명확하게 CLLocationManager 그리고 NMFLocationManager을 사용했을 때의 어떤 장점이 있는지는 아직 이해가 되지 않는다. 단, 후자의 경우, iOS 개발자라면 자주 사용하는 매니저는 아닌 것으로 보여진다! Swift 개발에 있어 CLLocationManager을 사용해서 "위치 트래킹" 허용 여부 동의를 파악한 이후 네이버 지도 객체에게 해당 데이터를 넘겨주는 과정을 거치는데, 애플 특유의 보안 특성을 위해 어쩔 수 없는 것으로 보인다.