This is WELL documented by Apple documentations.
Only if Location manager is started with "startMonitoringSignificantLocationChanges" you can get it.
So for example:
1) in App delegate start a singleton GeoLocationManager.shared.locationManager, so if you restart will be running.
2) in call back:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
{
update your position
it will be re-entrant if crashes.
I think You already set il plist:
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
note: add code for privacy, as since ios9 is mandatory..
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
...
}
And in plist:
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Needed to track on maps even if background</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Needed to track on maps even if background</string>