I think they made an optimization (probably using motion sensors), to detect "relatively" stationary positioning of the phone and they stop the location updates. This is only a speculation, but my tests currently show:
- Starting location updates; (tested with accuracy of 10 and 100 meters, 3 times each)
- Turn device's screen off to put the app in the background;
- Leave the device stationary (e.g. on a desk) for 30 min.
The data I log shows the geo-updates stop coming after ~ 15m and 30s. With that all other background processing you do is also terminated.
My device is iPhone 5 with iOS 7.
I am 95% sure, this wasn't the case on iOS 6/6.1. Where getting geo updates with 100m accuracy used to give you pretty much continuous running in background.
Update
If you restart the location manager every 8 minutes, it should run continuously.
Update #2
I haven't tested this in latest, but this is how I restarted it when I wrote the post. I hope this is helpful.
- (void)tryRestartLocationManager
{
NSTimeInterval now = [[NSDate date] timeIntervalSince1970];
int seconds = round(floor(now - locationManagerStartTimestamp));
if ( seconds > (60 * 8) ) {
[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];
locationManagerStartTimestamp = now;
}
}