Aplicación eliminada por el sistema operativo en iOS7 después de algunos segundos -editar

Estoy creando una aplicación basada en navegación paraios 7, para ello estoy tomando datos de ubicación de los usuarios, Utilizando el marco CoreLocation,

El requisito de la aplicación es comenzar a obtener la ubicación de los usuarios en segundo plano en un momento particular, para eso he implementado Notificaciones Push Silenciosas condidReceiveRemoteNotification fetchCompletionHandler: método,

He implementado con éxito esto usandoNotificación push silenciosa & it CallstartUpdatingLocation y puedo obtener datos de ubicación en el método delegado:

Usando esta carga útil:

{"aps" : {"content-available" : 1},"SilentPush" : "4"}

He habilitadolocation & remote notification para el modo de fondo:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
     __block UIBackgroundTaskIdentifier bgTask =0;
    UIApplication  *app = [UIApplication sharedApplication];
     bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [self.locationManager startUpdatingLocation];

 }];

didUpdateLocations

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
        lastLoc=[locations lastObject];
        [logFile addLocObject:[NSString stringWithFormat:@"Loc: %@",lastLoc]];
}

Pero problema es :

Después de que algunos segundos el método delegado de la clase de ubicación se detiene y no enviará ningún dato si el dispositivo se está moviendo, y cuando estoy hablando de la aplicación en primer plano, se llamará el método 'didFinishLaunhing', así que supongo que el sistema operativo matará la aplicación incluso La ubicación se está actualizando, en DispositivoDiagnostics & usage Recibo el siguiente informe de bloqueo:

Application Specific Information:
MockUpApp2[390] has active assertions beyond permitted time: 
{(
    <BKProcessAssertion: 0x145ac790> identifier: Called by MockUpApp2, from -[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] process: MockUpApp2[390] permittedBackgroundDuration: 40.000000 reason: finishTaskAfterBackgroundContentFetching owner pid:390 preventSuspend  preventIdleSleep  preventSuspendOnSleep 
)}

Ayer he preguntadoesta pregunta ahora puedo iniciar el administrador de ubicación en segundo plano a través de notificaciones push,

Entonces, por favor, cualquiera puede dar solución a este problema.

Gracias.

Nota: Si estoy ejecutando la aplicación en modo de depuración, significa que ejecuto la aplicación a través de XCode y no la detengo o no me desconecto, la aplicación se ejecutará. En este caso, la aplicación no se detendrá en el sistema operativo.

EDITAR 1

Según @Stephen Darlington Answer, si elimino todos los antecedentes como,

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
        [self.locationManager startUpdatingLocation];

}

Ahora la aplicación no llamarádidUpdateLocations incluso una vez, :(

¿Qué debo escribir en este método?

Edit 2

SegúnDoc de Apple decir:

If your app is suspended or not running, the system wakes up or launches your app and puts it into the background running state before calling the method.

Por lo tanto, la aplicación debe ejecutarse en segundo plano mientras esté habilitadamodo de fondo de ubicación ,?

Respuestas a la pregunta(1)

Su respuesta a la pregunta