9

I've been digging into this code which is using a basic timer to check for location updates. I then have it sending lat/lng to a server.

http://mobileoop.com/background-location-update-programming-for-ios-7 https://github.com/voyage11/Location

It's working well when plugged in and hooked up through XCode, however when I unplug and take the device mobile, the OS seems to always kill the background thread exactly after 3 minutes. So if I set the timer to run every 30 seconds, I'll get ~6 updates until I bring the app up to the foreground.

I have read that max background execution time is 3 minutes, but as I see it this code is resetting the background task after 1 minute, so I'm not sure why I'm seeing this.

There must be some way around this. Anything I can do here?

EDIT: this helped me: allowsBackgroundLocationUpdates in CLLocationManager in iOS9

Community
  • 1
  • 1
aherrick
  • 19,799
  • 33
  • 112
  • 188
  • aherrick did you find a solution for this? I tried the code listed in your edit, setting allowsBackgroundLocationUpdates = YES, but I am still getting terminated after 3 minutes with the background GPS polling. was there any additional changes you made to get the GPS polling in the background to work? – haplo1384 Oct 22 '15 at 17:23
  • Hey! yes actually. So I realized that there isn't a need to background pole. I just simply UIBackgroundModes set to Location. It just works at that point – aherrick Oct 23 '15 at 01:05

3 Answers3

6

se:

if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
    [self.locationManager setAllowsBackgroundLocationUpdates:YES];
}

This is needed for background location tracking.

Nilesh
  • 438
  • 5
  • 15
2

In case anyone else runs into this issue, the code at the github repo listed above - https://github.com/voyage11/Location - has recently been updated with a fix for iOS 9, that will allow the GPS to continuously poll in the background without the thread getting terminated after 3 minutes.

haplo1384
  • 1,206
  • 1
  • 12
  • 29
0

In case anyone runs into unreliablity problems when running this otherwise excellent library, integrated into other xcode modules in a more sophisticated app, they might look at the initialisation statement for the background task list Id array and consider changing _bgTaskIdList = [NSMutableArray array]; to _bgTaskIdList = [[NSMutableArray alloc]init]; in BackgroundTaskManager.m Until I did this I got unreliable behavious. Sometimes it worked and sometimes I got a stack dump. I found that this was because bgTaskList had been overwritten with other data causing bad access errors.

Slava Vedenin
  • 58,326
  • 13
  • 40
  • 59
Steve Brooker
  • 1,043
  • 11
  • 28