Cómo mantener una aplicación de iPhone funcionando en segundo plano completamente operativa


En primer lugar, sé que solo hay soporte para voip, aplicaciones de audio y ubicación para ejecutarse en segundo plano y que se ejecutarán solo mientras se reproduce el audio o mientras se usan servicios de ubicación, etc.

Lo que quiero saber es si hay una manera de mantener mi aplicación funcionando en segundo plano completamente operativa, no importa el impacto en la vida útil de la batería.

De esta manera, el usuario de mi aplicación puede seleccionar la configuración para mantener viva la aplicación cuando quiera y solo por la cantidad de tiempo que desee desear. por ejemplo, si está esperando algo que requiera que la aplicación se ejecute, después de recibir los mensajes puede desactivar la funcionalidad keep alive.

No se si esto es posible pero había leído algunos post que lo dicen pero desafortunadamente no dijeron cómo = (

ACTUALIZACIÓN: En este tutorial, descubrí que Acrobits tiene dos aplicaciones en el Apple Store que "pueden forzar a la aplicación a mantenerse viva y despierta en segundo plano". Así que hay una manera de hacer esto?

Author: Gilles, 2010-09-21

6 answers

Puede realizar tareas durante un tiempo limitado después de que se le indique a su aplicación que pase a segundo plano, pero solo durante el tiempo proporcionado. Si se ejecuta durante más tiempo que esto, su aplicación se terminará. Consulte la sección" Completar una tarea de larga duración en Segundo plano " de la Guía de Programación de Aplicaciones de iOS para saber cómo hacerlo.

Otros han aprovechado la reproducción de audio en segundo plano como un medio de mantenerse vivo como un proceso de fondo, pero Apple solo aceptará dicha aplicación si la reproducción de audio es una función legítima. Punto 2.16 en las directrices de revisión publicadas de Apple estados:

Las aplicaciones multitarea solo pueden usar servicios de fondo para su intención propósitos: VoIP, reproducción de audio, ubicación, finalización de tareas, local notificaciones, etc

 18
Author: Brad Larson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-21 17:30:19

A partir de iOS 7, hay formas más nuevas para que las aplicaciones se ejecuten en segundo plano. Apple ahora reconoce que las aplicaciones tienen que descargar y procesar datos constantemente.

Aquí está la nueva lista de todas las aplicaciones que 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 en segundo plano.
  3. Aplicaciones que mantienen a los usuarios informados de su ubicación en absoluto tiempos, como una aplicación de navegación
  4. Aplicaciones que admiten Protocolo de Voz sobre Internet (VoIP)
  5. Aplicaciones que necesitan descargar y procesar contenido nuevo regularmente
  6. Aplicaciones que reciben actualizaciones regulares de accesorios externos

Puede declarar las tareas en segundo plano compatibles con la aplicación en Info.plist usando Código X 5+. Por ejemplo. agregar la clave UIBackgroundModes a la información de tu aplicación.el archivo plist y la adición de un valor de 'fetch' a la matriz permite que su aplicación descargue regularmente y procesa pequeñas cantidades de contenido de la red. Puede hacer lo mismo en la pestaña' capacidades ' de las propiedades de la aplicación en XCode 5 (adjuntando una instantánea)

Pestaña de capacidades en XCode 5Puede encontrar más información sobre esto en la documentación de Apple

 31
Author: Pradeep Mahdevu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-30 12:53:20

Si alguna tarea en segundo plano se ejecuta más de 10 minutos,entonces la tarea se suspenderá y se llamará al bloque de código especificado con beginBackgroundTaskWithExpirationHandler para limpiar la tarea. el tiempo restante en segundo plano se puede comprobar con [[UIApplication sharedApplication] backgroundTimeRemaining]. Inicialmente, cuando la aplicación está en primer plano backgroundTimeRemaining se establece en un valor más grande. Cuando la aplicación pasa a segundo plano, se puede ver backgroundTimeRemaining valor disminuye de 599.XXX ( 1o minutos). una vez que el backgroundTimeRemaining se convierte en CERO, la tarea en segundo plano se suspenderá.

        //1)Creating iOS Background Task
        __block UIBackgroundTaskIdentifier background_task;
        background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

               //This code block is execute when the application’s 
               //remaining background time reaches ZERO.
          }];


        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //### background task starts

            //#### background task ends
        });

        //2)Making background task Asynchronous
        if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
        {
            NSLog(@"Multitasking Supported");

            __block UIBackgroundTaskIdentifier background_task;
            background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid;
            }];


        **//Putting All together**
            //To make the code block asynchronous
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                //### background task starts
                NSLog(@"Running in the background\n");
                while(TRUE)
                {
                    NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]);
                    [NSThread sleepForTimeInterval:1]; //wait for 1 sec
                }
                //#### background task ends

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid; 
            });
        }
        else
        {
            NSLog(@"Multitasking Not Supported");
        }
 7
Author: Sabareesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-09 17:27:03

Para ejecutar en dispositivos iOS de stock, haga que su aplicación sea un reproductor/grabador de audio o una aplicación VOIP, una legítima para enviar a la tienda de aplicaciones o una falsa, aunque solo sea para su propio uso.

Incluso esto no hará que una aplicación sea "completamente operativa", sea lo que sea, sino restringida a API limitadas.

 3
Author: hotpaw2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-21 16:35:46

Depende de lo que haga. Si su aplicación ocupa demasiada memoria, o hace llamadas a funciones/clases que no debería, SpringBoard puede terminarla. Sin embargo, lo más probable es que sea rechazado por Apple, ya que no sigue sus 7 usos en segundo plano.

 2
Author: jrtc27,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-21 16:35:10

Puede ser que el enlace ayude a bcz u podría tener que implementar el código en Appdelegate en el método app run in background .. Consulte también el developer.apple.com sitio para la clase de aplicación Aquí está el enlace para ejecutar la aplicación en segundo plano

 1
Author: Xeieshan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-01 12:29:00