Sobes.tech
Junior

¿Puedes contarme sobre el ciclo de vida de una aplicación en iOS?

sobes.tech AI

Respuesta de la IA

La aplicación pasa por los siguientes estados:

  • No en ejecución: La aplicación no está en ejecución.
  • Inactiva: La aplicación está en ejecución, pero no recibe eventos (por ejemplo, durante una llamada entrante o al pasar a segundo plano).
  • Activa: La aplicación está activa y completamente funcional. Recibe todos los eventos.
  • Fondo: La aplicación está en modo de fondo. Puede ejecutar código limitado o suspenderse.
  • Suspendida: La aplicación en modo de fondo, pero su ejecución está suspendida por el sistema para ahorrar recursos.

Las transiciones entre estados y los eventos asociados son gestionados por el marco del sistema UIKit (o SwiftUI) y el delegado de la aplicación (UIApplicationDelegate o @main Struct en SwiftUI).

Métodos clave del delegado de la aplicación:

  • application:didFinishLaunchingWithOptions:: La aplicación ha sido lanzada.
  • applicationDidBecomeActive:: La aplicación pasa a estar activa.
  • applicationWillResignActive:: La aplicación pasa de estar activa (por ejemplo, durante una llamada entrante).
  • applicationDidEnterBackground:: La aplicación pasa a modo de fondo.
  • applicationWillEnterForeground:: La aplicación pasa de fondo a activo.
  • applicationWillTerminate:: La aplicación se cierra.

Ejemplo de uso en App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Se ejecuta al iniciar la aplicación
        print("Aplicación iniciada")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // La aplicación se ha vuelto activa
        print("La aplicación se ha vuelto activa")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // La aplicación pasa de estar activa
        print("La aplicación pasa de estar activa")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // La aplicación ha pasado a segundo plano
        print("La aplicación ha pasado a segundo plano")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // La aplicación pasa a primer plano
        print("La aplicación pasa a primer plano")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // La aplicación se cierra
        print("La aplicación se cierra")
    }
}

En SwiftUI, el ciclo de vida se gestiona con la estructura con @main y métodos como onAppear, onDisappear, onChange. También están disponibles los Valores del Entorno, que permiten seguir el estado de la escena (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Seguimiento del estado de la escena

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // La escena se ha vuelto activa
                print("La escena se ha vuelto activa")
            } else if newPhase == .inactive {
                // La escena se ha vuelto inactiva
                print("La escena se ha vuelto inactiva")
            } else if newPhase == .background {
                // La escena ha pasado a modo de fondo
                print("La escena ha pasado a modo de fondo")
            }
        }
    }
}