본문 바로가기
iOS/설명

[iOS] Background Modes의 Location Updates

by Sky Titan 2022. 5. 30.
728x90
 

Apple Developer Documentation

 

developer.apple.com

Handling Location Events in the Background

  • 대부분의 앱은 foreground에서 위치 서비스를 사용하지만 종종 Background 상태에서도 위치 정보를 업데이트 받아야할 필요가 있다.
  • Application Capabilities의 Background Mode에서 Location Updates를 사용하면 백그라운드 상태에서도 위치 정보를 업데이트 받을 수 있다.
    • 이 때 CLLocationManager의 allowsBackgroundLocationUpdates를 true로 해놓아야 한다.
  • stopUpdatingLocation() 메서드를 호출하기 전까지 앱은 Background state로 유지되고 위치 정보를 업데이트 받게 된다.
import UIKit
import CoreLocation
class ViewController: UIViewController {

    let manager = CLLocationManager()
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.allowsBackgroundLocationUpdates = true
        
        manager.requestAlwaysAuthorization()
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()
        manager.startUpdatingHeading()
        manager.requestLocation()
    }


}
extension ViewController: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        manager.startUpdatingHeading()
        manager.startUpdatingLocation()
    }
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.first {
            print("didupdate \(location.coordinate.latitude) \(location.coordinate.longitude)")
        }
    }
    
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("error \(error.localizedDescription)")
    }
}

Background State로 유지되고 location이 계속 업데이트 되는 모습을 확인 할 수 있다.

 

728x90

'iOS > 설명' 카테고리의 다른 글

[iOS] App launch Sequence  (0) 2022.06.06
[iOS] CFGetRetainCount  (0) 2022.06.02
[iOS] Xcode에서 Application state 확인하기  (0) 2022.05.30
[iOS] Local Notification은 suspended에서 동작할까  (3) 2022.05.30
[iOS] applicationWillTerminate  (0) 2022.05.25

댓글