Reciba actualizaciones de acelerómetro en segundo plano utilizando el marco CoreMotion

Estoy usando el siguiente código para obtener datos del acelerómetro (usando el marco CoreMotion ):

 CMMotionManager *motionManager = [[CMMotionManager alloc] init]; motionManager.accelerometerUpdateInterval = 1.0 / 60.0; [motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { NSLog(@"ACCELEROMETER DATA = %@",accelerometerData); }]; 

Cuando la aplicación está en modo de primer plano, recibo el registro, pero cuando entra en segundo plano, recibo el registro solo cuando se reproduce la música en la aplicación. Agregué el siguiente archivo plist de información de la aplicación:

 - Required background modes - App registers for location updates - App plays audio or streams audio/video using AirPlay 

La pregunta es: ¿cómo puedo recibir actualizaciones de acelerómetro en segundo plano, cuando la música no se está reproduciendo?

No solo puedes usar el acelerómetro para obtener datos del fondo,

Y cuando diga que su App registers for location updates , inicie el administrador de ubicaciones en primer plano.

Implementando tareas de fondo de larga ejecución

Para las tareas que requieren más tiempo de ejecución para implementar, debe solicitar permisos específicos para ejecutarlas en segundo plano sin que se suspendan. En iOS, solo los tipos de aplicaciones específicas pueden ejecutarse en segundo plano:

  1. Aplicaciones que reproducen contenido audible para el usuario mientras está en segundo plano, como una aplicación de reproductor de música
  2. Aplicaciones que graban contenido de audio mientras está en segundo plano.
  3. Aplicaciones que mantienen a los usuarios informados de su ubicación en todo momento, como una aplicación de navegación
  4. Aplicaciones compatibles con Voice over Internet Protocol (VoIP)
  5. Aplicaciones que necesitan descargar y procesar nuevo contenido regularmente
  6. Aplicaciones que reciben actualizaciones regulares de accesorios externos

en su AppDelegate.m

 - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restre your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. UIApplication* app = [UIApplication sharedApplication]; __block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; }