"Take advantage of background execution modes to respond to location-related events."
로케이션 관련 이벤트에 응답하기 위해 백그라운드 실행 모드를 활용합니다.
보통 앱은 대부분의 위치 서비스를 포어그라운드에서 사용하지만, 몇 가지 위치 서비스는 백그라운드에서 실행될 수 있으며, 시스템이 앱을 launch 하도록 할 수도 있습니다. 백그라운드에서 이벤트를 받으려면 Xcode에서 "Location updates" 기능을 설정해야 합니다. 아래 이미지에서 보이는 것과 같습니다. CLLocationManager
객체의 allowsBackgroundLocationUpdates
속성을 true
로 설정하는 것도 필요합니다.
위치 업데이트가 앱이 백그라운드에 있는 동안 발생하면 시스템은 앱을 launch 하고 application(_:willFinishLaunchingWithOptions:)
혹은 application(_:didFinishLaunchingWithOptions:)
메소드로 옵션 딕셔너리를 전달합니다. 딕셔너리는 앱 launch로 생기는 위치 서비스를 나타내는 위치 키를 포함할 것ㅇ비니다. 그러나 이 키는 항상 존재하는 것이 아니며 위치 이벤트가 발생했다고 하더라도 존재하지 않을 수 있습니다. 보류중인 위치 업데이트를 받으려면 아래처럼 해야 합니다.
CLLocationManager
객체를 생성하고 이 객체의 딜리게이트를 설정해야 합니다.startMonitoringVisits()
, startMonitoringSignificantLocationChanges()
, startMonitoring(for:)
중 한 가지를 호출해야 합니다. 보류중입 업데이트를 받으려고 startUpdatingLocation()
을 호출할 필요는 없습니다.위치 모니터링 서비스는 코어 로케이션에게 모니터링을 멈추라고 지시할 때까지 계속됩니다. 앱이 더 이상 위치 업데이트가 필요하지 않으면 stopMonitoringVisits()
, stopMonitoringSignificantLocationChanges()
, stopMonitoring(for:)
중 한 가지를 호출해야 합니다.
아래 테이블은 새로운 위치 업데이트를 알리기 위해 앱을 launch 하는 서비스를 리스트로 보여주고 있습니다. 앱을 다시 launch 하는 서비스 역시 이렇게 하며 사용자가 앱을 강제종료한 후에도 마찬가지입니다.
Service | Launches app |
---|---|
Standard location service | No |
Significant-change location service | Yes |
Visits service | Yes |
Region monitoring | |
Yes | |
iBeacon ranging | No |
Heading service | No |
Note
코어 로케이션은 백그라운드에서 위치 이벤트 전달을 계속합니다. 이는 사용자가 앱 혹은 모든 앱에 대해 백그라운드 앱 리프레시 설정을 비활성화로 설정해도 그렇습니다. 백그라운드 리프레시 상태에 대한 더 많은 정보는backgroundRefreshStatus
를 보시기 바랍니다.
backgroundRefreshStatus
https://developer.apple.com/documentation/uikit/uiapplication/1622994-backgroundrefreshstatus
https://velog.io/@panther222128/backgroundRefreshStatus
위치 업데이트를 가장 효율적인 방법으로 가져오지만, 다른 서비스에 비해 덜 빈번하게 가져옵니다.
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_visits_location_service
https://velog.io/@panther222128/Using-the-Visits-Location-Service
전력 소비를 절약할 수 있는 방법으로 위치 업데이트를 가져오지만, 표준 위치 서비스에 비해 덜 빈번하게 가져옵니다.
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_significant-change_location_service
https://velog.io/@panther222128/Using-the-Significant-Change-Location-Service
구체화한 파라미터에 기반해 주기적인 위치 업데이트를 가져옵니다.
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/using_the_standard_location_service
https://velog.io/@panther222128/Using-the-Standard-Location-Service
위도/경도 쌍과 해당 위치의 더 사용자 친화적 설명 사이를 변환합니다.
https://developer.apple.com/documentation/corelocation/converting_between_coordinates_and_user-friendly_place_names
https://velog.io/@panther222128/Converting-Between-Coordinates-and-User-Friendly-Place-Names
지도에 표시된 사용자의 위치를 리버스 지오코딩을 통해 정보를 갖는 텍스트 설명으로 변환합니다.
https://developer.apple.com/documentation/mapkit/mkmapview/converting_a_user_s_location_to_a_descriptive_placemark
https://velog.io/@panther222128/Converting-a-Users-Location-to-a-Descriptive-Placemark