Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

Swift로 백그라운드에서 현재 위치를 추적하는 방법 완벽 가이드

Swift에서 백그라운드 위치 추적 구현하기

Swift로 개발한 앱이 백그라운드 상태에서도 현재 위치를 계속 가져오려면 몇 가지 단계를 거쳐야 합니다. 이 글에서는 권한 설정부터 위치 업데이트 처리까지 전체 과정을 단계별로 살펴보겠습니다.

1단계: 사용자 권한 설정

가장 먼저 사용자로부터 위치 정보 접근 권한을 받아야 합니다. Info.plist 파일에 아래 두 개의 키를 추가하고, 각각의 용도를 설명하는 문구를 작성하세요.

  • Privacy - Location Always and When In Use Usage Description
  • Privacy - When In Use Usage Description

권한 요청 문구는 사용자가 앱이 왜 위치 정보를 필요로 하는지 명확히 이해할 수 있도록 구체적으로 작성하는 것이 좋습니다.

2단계: CoreLocation 프레임워크 임포트 및 권한 요청

다음으로 CoreLocation 프레임워크를 임포트하면 위치와 관련된 모든 라이브러리와 메서드를 사용할 수 있습니다. 이후 CLLocationManager 객체를 생성하여 사용자에게 권한 승인을 요청합니다.

var locationManager: CLLocationManager?
override func viewDidLoad() {
   super.viewDidLoad()
   locationManager = CLLocationManager()
   locationManager?.delegate = self
   locationManager?.requestAlwaysAuthorization()
}

3단계: 위치 업데이트 시작 및 백그라운드 허용

앱을 실행한 후 특정 모듈에서 위치 기능이 필요하면 자동으로 사용자 권한 요청 팝업이 표시됩니다. 권한을 받았다면 아래 코드를 추가하여 위치 변경 모니터링을 시작하고 위치를 업데이트할 수 있습니다.

locationManager.startUpdatingLocation()
locationManager.startMonitoringSignificantLocationChanges()
locationManager.allowsBackgroundLocationUpdates = true

주의: Xcode의 Signing & Capabilities에서 Background Modes를 추가하고 Location updates 옵션을 반드시 활성화해야 합니다. 이 설정이 누락되면 allowsBackgroundLocationUpdates가 정상적으로 동작하지 않고 런타임 오류가 발생할 수 있습니다.

4단계: 위치 업데이트 처리

설정이 완료되면 CLLocationManagerDelegate의 didUpdateLocations 메서드를 통해 백그라운드에서 서버로 위치를 전송할 수 있습니다.

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
   // API를 호출하여 서버에 위치 업데이트
}

이제 위치가 업데이트될 때마다 이 delegate 메서드가 호출되며, 메서드 내부에 서버로 위치를 전송하는 코드를 작성하면 됩니다.

추가 팁: 배터리 효율 고려하기

백그라운드 위치 추적은 배터리 소모가 크기 때문에, 실시간성이 크게 중요하지 않다면 startMonitoringSignificantLocationChanges()만 사용하거나 desiredAccuracydistanceFilter 값을 조절하여 불필요한 GPS 호출을 줄이는 것이 좋습니다. 또한 iOS는 백그라운드에서 위치를 장기간 사용하는 앱의 동작을 제한할 수 있으므로, 항상 최신 iOS 정책을 확인하는 것을 권장합니다.