Salir de la aplicación en iOS 4.0

Antes de que iOS4.0 haga clic en el botón de inicio en iPhone sale de la aplicación, y Apple tenía en su guía que no se aceptaba salir programáticamente de la aplicación.

ahora todo cambió en iOS4.0, al hacer clic en el botón de inicio pone su aplicación en modo suspendido (multitarea) … y creo que debería haber una manera clara para que el usuario salga de la aplicación, como un botón de salida.

¿ahora está bien con la manzana? y como se puede hacer?

Puede establecer la clave Info.plist UIApplicationExitsOnSuspend para asegurarse de que la aplicación se cierre por completo.

Hay una razón para la exit() invocada programáticamente exit() .

Supongamos que tiene una aplicación de VoIP que siempre se inicia en el arranque y se reinicia cuando el sistema la elimina, por ejemplo, cuando ocurre una advertencia de memoria. Normalmente es el comportamiento preferido porque necesita ejecutar en segundo plano para mantener sus sockets TCP voip.

Sin embargo, si la aplicación admite varios modos de funcionamiento, como a) ejecutar en segundo plano utilizando TCP, yb) no ejecutar en segundo plano, sino iniciar solo después de aceptar la notificación PUSH, si el usuario utiliza la aplicación en modo b) no lo hace t imagina que la aplicación está consumiendo memoria que puede usarse para otras aplicaciones.

Por lo tanto, sería bueno si la aplicación pudiera verificar el inicio si se inició en segundo plano y el usuario desea que la aplicación se ejecute en el modo b) y exit(0) correctamente, por lo que ya no se reiniciará automáticamente.

Ver también iOS Debugging Magic (Nota técnica TN2239) :

Tenga en cuenta que el ciclo de vida de la aplicación iOS está bajo el control del usuario, lo que significa que las aplicaciones iOS no deberían simplemente dejar de funcionar. Su comstackción de lanzamiento solo debe llamar a abortar en circunstancias en las que se hubiera bloqueado de todos modos, y la llamada de aborto evita dañar los datos del usuario o le permite diagnosticar el problema más fácilmente.

Mientras que en el tema de determinar la causa de la salida prematura, puede ser de interés comprender y analizar los informes de fallos de la aplicación del iPhone OS (nota técnica TN2151) .

Perdón por salir un poco del tema, pero se relaciona con salidas tempranas y diagnóstico.

Jeff

Tuve un problema real con esto. Hay un gran punto para salir de forma manual o prgramática.

Con el sistema operativo iPhone anterior, mi aplicación estaba escribiendo su estado (primer uso o segunda vez en adelante, etc.) en un plist cuando terminó. Cuando el usuario regresó, quería mostrar cosas diferentes leyendo el plist. Además, quería mostrar la primera pantalla cada vez que el usuario regresaba después de salir.

Con la aplicación que se suspende en segundo plano con iPhone OS4, la aplicación vuelve donde lo dejó (es decir, que muestra la misma pantalla donde estaba el usuario) y nunca cambia el estado de la misma, porque applicationWillTerminate ahora nunca se llama.

Debido a que este es el comportamiento deseado la mayor parte del tiempo (para poder continuar cuando salga de la aplicación temporalmente), tiene que haber una manera de poder elegir, es decir, suspenderlo o abandonarlo.

Dado que configurar UIApplicationExitsOnSuspend = YES solo da una forma (es decir, siempre termina cuando se presiona HOME), esta no es la solución que estoy buscando.

Quiero que la aplicación sepa una vez que se complete toda la cadena de pasos, en oposición a que solo se haya suspendido la secuencia, y que se retire solo en el momento correcto.

Para hacer esto, tengo que ser capaz de terminar la aplicación y escribir el estado una vez que el uso complete la secuencia completa. Otras veces, solo quiero que se suspenda la aplicación.

Si toca el botón INICIO dos veces, puede ver las aplicaciones suspendidas. Puedo eliminar (cerrar) mi aplicación al tocarla durante más tiempo y tocar el símbolo (-) que aparece, pero esto no es tan intuitivo para los usuarios y demasiados pasos.

Otra opción es tener un botón Salir como una de las tabs de navegación en mi aplicación, pero eso es feo. Por ahora, mi única opción parece ser optar por configurar UIApplicationExitsOnSuspend = YES.

Siempre puedes usar exit(1) . Esta es una salida en bruto / forzada con un entero para un código / razón. Puede usar esto durante el desarrollo, como en el modo de simulación cuando solo desea terminar; como en AHORA.

Estos son los pasos para la respuesta de @Joost Schuur:

  1. Abra su archivo info.plist

  2. Agregar la clave UIApplicationExitsOnSuspend o Select Application no se ejecuta en segundo plano

  3. Establezca la nueva clave en SÍ o Rellene la checkbox

Los puntos de interrupción en applicationWillResignActive y applicationWillTerminate mostrarán que funciona.

Se supone que no debes hacer esto. Cuando el usuario quiera abandonar su aplicación, presionará el botón INICIO.

Cuando el usuario presiona el botón de inicio, se obtiene una notificación UIApplicationWillResignActiveNotification . Usa esa notificación para derribar todos tus recursos.

Básicamente, su aplicación debe “esconderse en una esquina” (consum la menor cantidad de memoria posible) cuando el usuario presiona el botón de inicio. Sin embargo, hay una compensación ya que cuanto más se derriba, más tiempo tarda la aplicación en volver a mostrarse cuando el usuario vuelve a conectarse (necesita volver a cargar todos sus recursos).

Puedes hacerlo:

 @IBAction func yourButtonAcation(_ sender: Any) { UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil) } 

Puede poner una aplicación programáticamente en segundo plano con este comando privado:

(pero su aplicación será rechazada si la usa)

 [[UIApplication sharedApplication] suspend];