[map] CoreLocation, MapKit

g4oo0·2025년 7월 11일

Swift

목록 보기
4/4

CoreLocation

본격적인 지도를 구현하기에 앞서 iOS에서 사용자의 위치 정보방향(Orientation) 을 얻기 위해서는 Core Location 프레임워크를 사용한다.
Core Location은 Wi-Fi, GPS, Bluetooth, 자력계(Magnetometer), 기압계(Barometer), 셀룰러 등 사용 가능한 모든 하드웨어를 활용해 기기의 위치와 관련된 정보를 제공한다.

✅ 지원 플랫폼

  • iOS 2.0+
  • iPadOS 2.0+
  • macOS 10.6+
  • watchOS 2.0+
  • tvOS 9.0+
  • visionOS 1.0+
  • Mac Catalyst 13.0+

🛠 CLLocationManager

Core Location의 기능을 사용하기 위해서는 CLLocationManager 클래스의 인스턴스를 생성하여 사용한다.
이 객체를 통해 위치 서비스의 구성, 시작, 중지가 가능하며, 비동기 이벤트를 통해 다양한 위치 정보를 수신할 수 있다.

iOS 17부터는 liveUpdates(_:) API를 사용하여 비동기 스트림으로 위치 데이터를 수신할 수 있다.

🌐 Core Location이 제공하는 주요 기능

기능설명
표준 및 중요 위치 업데이트 (Standard & Significant Updates)사용자의 현재 위치 변화를 실시간으로 추적하며, 정확도와 빈도는 앱의 필요에 따라 조정할 수 있습니다.
지오펜싱 (Region Monitoring)사용자가 특정 지역(반경) 에 들어오거나 벗어날 때 이벤트를 발생시킵니다.
비콘 탐지 (Beacon Ranging)근처의 iBeacon 장치를 감지하고 위치 정보를 제공합니다.
방향 감지 (Compass Headings)기기의 나침반 방향 변화를 감지하여 제공합니다.

[참고] https://developer.apple.com/documentation/corelocation


MapKit

지도는 CoreLocation 만으로 표현할 수 없다.
지도에 위치를 시각화하고 상호작용하는 기능은 MapKit이 담당한다.

iOS 14부터 SwiftUI에서도 MapKit 사용할 수 있게 Map이라는 전용 뷰가 생겼으나 Deprecated가 아주 많으니 아래 꼭 참고하기.. ⭐️⭐️⭐️
https://developer.apple.com/documentation/mapkit

import SwiftUI
import MapKit

struct MapView: View {
    @State var region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 37.5665, longitude: 126.9780), span: MKCoordinateSpan(latitudeDelta: 0.0, longitudeDelta: 0.05))
    
    var body: some View {
        Map(initialPosition: .region(region))
    }
}

#Preview {
    MapView()
}
  • MKCoordinateRegion : 지도에서 보여줄 영역(중심 좌표 + 줌 정도)
  • Map : SwiftUI의 지도 컴포넌트(UIKit의 MKMapView 역할) -> Deprecated 매우 많음!!
  • CLLocationCoordinate2D : 위도(latitude), 경도(longitude)

✏️ Info.plist에 위치 권한 설정하기

앱이 위치 정보를 사용하려면 반드시 사용자에게 권한을 요청해야 한다.

그 전에 Info.plist 파일에 권한 사용 목적을 명시하는 문자열을 추가해야 한다.

권한 키설명
NSLocationWhenInUseUsageDescription앱 사용 중에만 위치 정보 접근
NSLocationAlwaysUsageDescription백그라운드에서도 지속적인 위치 접근
<key>NSLocationWhenInUseUsageDescription</key>
<string>이 앱은 현재 위치를 표시하기 위해 위치 정보가 필요합니다.</string>

0개의 댓글