NWPathMonitor: qué es, monitoreo de red y trabajo en iOS

Autor: IT Sectr Publicado: 2026-03-10 Tiempo de lectura: 9 min

NWPathMonitor es una clase del framework Network en iOS y macOS para monitorear el estado de la ruta de red del dispositivo. Según Apple Developer Documentation (2025), NWPathMonitor permite a la aplicación rastrear la disponibilidad de la red, determinar el tipo de interfaz y reaccionar a los cambios de conexión. NWPathMonitor proporciona información sobre el tipo de conexión, costos de datos y disponibilidad de internet a través de un callback conveniente con NWPath.

Puntos clave

  • NWPathMonitor — una clase del framework Network para monitoreo asincrónico de la ruta de red en iOS y macOS.
  • NWPath contiene información sobre la disponibilidad de la red, tipo de interfaz (Wi-Fi, datos móviles, Ethernet) y estado de costos.
  • El método start inicia el monitoreo en la cola dispatch queue especificada, el método cancel lo detiene.
  • La propiedad pathUpdateHandler — un closure que se llama con cada cambio del estado de la ruta de red.
  • NWPathMonitor admite filtrado por tipo de interfaz requerido mediante el parámetro requiredInterfaceType.

¿Qué es NWPathMonitor?

NWPathMonitor es una clase del framework Network introducida por Apple en iOS 12 y macOS 10.14 Mojave. Proporciona una API moderna para rastrear cambios en la ruta de red del dispositivo — la combinación de interfaces de red a través de las cuales pasa el tráfico de la aplicación.

Antes de iOS 12, se usaba la biblioteca Reachability construida sobre el framework SystemConfiguration en C para el monitoreo de red. NWPathMonitor es una alternativa nativa en Swift con una API más rica, soporte para tipos de conexión modernos (VPN, multipath, LTE, 5G) e integración integrada con GCD.

La diferencia clave entre NWPathMonitor y Reachability — el objeto NWPath proporciona no solo un estado binario “disponible/no disponible”, sino una imagen completa de la ruta: interfaces utilizadas, su prioridad, costos, estado de roaming y capacidades de proxy y VPN. El desarrollador obtiene información completa para tomar decisiones sobre solicitudes de red.

Historia del framework Network

El framework Network surgió como un reemplazo moderno para las API de bajo nivel en C — CFStream y BSD Sockets. Proporciona una interfaz unificada para la comunicación de red en todas las plataformas Apple, incluyendo watchOS y tvOS. NWPathMonitor es parte de este framework junto con NWConnection, NWListener y NWBrowser.

El framework Network está escrito en Swift y usa GCD para procesamiento asincrónico. Esto significa que los callbacks de NWPathMonitor se ejecutan en la dispatch queue especificada, integrándose con la arquitectura de subprocesos múltiples existente de la aplicación sin gestión manual de hilos.

Cómo usar NWPathMonitor en una aplicación

El uso de NWPathMonitor comienza con la creación de una instancia de la clase y la configuración del callback pathUpdateHandler. Luego se llama al método start con una dispatch queue donde se ejecutará el closure. El monitoreo se detiene con el método cancel, que también libera recursos.

swift
import Network

class NetworkMonitor {
    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("monitor")

    func startMonitoring() {
        monitor.pathUpdateHandler = { path in
            if path.status == .satisfied {
                print("Red disponible")
            } else {
                print("Red no disponible")
            }
        }
        monitor.start(on: queue)
    }

    func stopMonitoring() {
        monitor.cancel()
    }
}

Trabajo con tipo de interfaz

NWPathMonitor se puede configurar para monitorear solo un tipo de interfaz específico. Use el inicializador NWPathMonitor(requiredInterfaceType:) con el parámetro NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet o .loopback. Si no se especifica tipo, el monitoreo cubre todas las interfaces.

Ejemplo práctico: una aplicación de streaming puede monitorear solo Wi-Fi y advertir al usuario sobre el cambio a datos móviles. Verificar isConstrained e isExpensive en NWPath permite determinar si la conexión actual es tarificada o limitada en velocidad.

Ciclo de vida del monitoreo

El monitoreo debe iniciarse al lanzar la aplicación o al entrar en primer plano, y detenerse al entrar en segundo plano. Se recomienda crear una instancia de NWPathMonitor para toda la aplicación (singleton) y usarla desde diferentes módulos a través de un protocolo o capa de servicio.

Propiedades y capacidades de NWPath

NWPath es un objeto pasado a pathUpdateHandler que describe el estado actual de la ruta de red. Contiene cinco propiedades clave que cubren la mayoría de los escenarios de monitoreo de red. NWPath.Status — una enumeración con tres estados: satisfied (disponible), unsatisfied (no disponible) y requiresConnection (necesita conexión).

PropiedadTipoDescripción
statusNWPath.StatusEstado actual de la ruta: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Lista de todas las interfaces de red disponibles
gateways[NWEndpoint]Lista de gateways utilizados para el enrutamiento
isExpensiveBoolTrue si la conexión es tarificada (datos móviles, hotspot personal)
isConstrainedBoolTrue si la conexión tiene límite de velocidad (Low Data Mode)

Verificación de costos y restricciones

La propiedad isExpensive es una bandera crítica para aplicaciones que trabajan con grandes volúmenes de datos. Si isExpensive = true, la aplicación debe reducir la calidad de streaming, posponer descargas de actualizaciones o advertir al usuario. isConstrained indica que el Low Data Mode está activado.

Para verificar la disponibilidad de internet (no solo de red), use el método usesInterfaceType. Si el dispositivo está conectado a Wi-Fi sin internet — NWPath puede mostrar satisfied, pero el acceso real está ausente. En estos casos, se requiere validación adicional mediante NWConnection.

Ejemplos de implementación de NWPathMonitor

Veamos una implementación avanzada de NWPathMonitor con manejo de costos, tipos de interfaz y notificación a ViewModel a través de un publisher. El ejemplo usa el framework Combine para actualizaciones reactivas de la UI cuando cambia el estado de la red.

swift
import Network
import Combine

final class NetworkManager: ObservableObject {
    static let shared = NetworkManager()
    @Published private(set) var isConnected = true
    @Published private(set) var isExpensive = false

    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("NetworkMonitor")

    private init() {
        monitor.pathUpdateHandler = { [weak self] path in
            DispatchQueue.main.async {
                self?.isConnected = path.status == .satisfied
                self?.isExpensive = path.isExpensive
            }
        }
        monitor.start(on: queue)
    }

    func checkInterface() -> NWInterface.InterfaceType {
        let path = monitor.currentPath
        if path.usesInterfaceType(.wifi) { return .wifi }
        if path.usesInterfaceType(.cellular) { return .cellular }
        return .other
    }
}

Manejo de pérdida de red con acción diferida

Cuando se pierde la conexión, puede ser necesario no solo notificar a la UI sino también realizar acciones diferidas — por ejemplo, guardar un borrador de solicitud para enviarlo después. Implemente una cola de solicitudes diferidas que acumula operaciones durante el estado unsatisfied y las envía cuando se restaura satisfied.

El patrón ReachabilityManager con delegado es ideal para esta tarea: NWPathMonitor notifica al manager, el manager actualiza la cola y la UI. Cuando el estado cambia a satisfied, la cola se vacía automáticamente y la UI recibe una indicación de restauración de conexión.

NWPathMonitor vs Reachability

Antes de NWPathMonitor, la solución estándar para monitoreo de red en iOS era la biblioteca Reachability de Apple (ejemplo de la documentación), construida sobre SystemConfiguration. Las principales diferencias: Reachability funciona a través de SCNetworkReachability en C, no admite tipos de red modernos y solo proporciona una respuesta binaria de disponibilidad.

NWPathMonitor soluciona estas limitaciones: está escrito en Swift, soporta VPN, multipath, 5G y LTE, proporciona información detallada sobre cada interfaz y funciona de forma asincrónica a través de GCD. Reachability todavía se usa en proyectos con soporte mínimo de iOS 11 e inferior.

CaracterísticaNWPathMonitorReachability
Versión mínimaiOS 12iOS 2
IdiomaSwift (Network)C (SystemConfiguration)
Tipos de interfazWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (genérico)
isExpensiveNo
AsincroníaGCD (dispatch queue)RunLoop
Múltiples interfacesSí (multipath)No

Cuándo usar Reachability

Si tu aplicación soporta iOS 11 e inferior, Reachability sigue siendo la única opción. Para proyectos iOS 12+, se recomienda usar NWPathMonitor directamente — se integra mejor con el código Swift moderno, Combine y SwiftUI.

La migración de Reachability a NWPathMonitor es sencilla: simplemente reemplace las llamadas SCNetworkReachability con NWPathMonitor, conservando la misma lógica de manejo. Una capa de abstracción (NetworkMonitorProtocol) permitirá cambiar entre implementaciones sin modificar la lógica de negocio de la aplicación.

Preguntas frecuentes

¿Cuál es la versión mínima de iOS requerida para NWPathMonitor?

NWPathMonitor está disponible desde iOS 12.0, macOS 10.14, watchOS 5.0 y tvOS 12.0. Para proyectos que soporten versiones anteriores, use Reachability de SystemConfiguration o bibliotecas envolventes con compilación condicional mediante #available.

¿En qué se diferencia NWPath.Status.satisfied de unsatisfied?

Satisfied significa que el tráfico puede pasar a través de al menos una interfaz. Unsatisfied — ninguna interfaz está disponible. El estado requiresConnection — la ruta requiere establecer una conexión (por ejemplo, VPN no conectada) y el tráfico no puede pasar temporalmente.

¿Cómo determinar el tipo de red — Wi-Fi o móvil?

Use el método usesInterfaceType en NWPath: path.usesInterfaceType(.wifi) para Wi-Fi, path.usesInterfaceType(.cellular) para datos móviles. El método devuelve true si el tráfico actual pasa a través del tipo de interfaz especificado.

¿Debo cancelar NWPathMonitor al entrar en segundo plano?

Se recomienda pausar el monitoreo en segundo plano para ahorrar batería. Llamar a monitor.cancel() en applicationDidEnterBackground y reiniciar start en applicationWillEnterForeground reducen el consumo de energía. Use Background Task para operaciones críticas.

¿Cómo manejar portales cautivos con NWPathMonitor?

NWPathMonitor puede mostrar satisfied incluso con un portal cautivo. Para determinar el acceso real a internet, realice una solicitud HTTP a un endpoint de confianza a través de NWConnection. Si ocurre una redirección — el portal está activo y requiere autorización en un WebView.

Resumen

  • NWPathMonitor — una clase del framework Network para monitorear la ruta de red en iOS 12+ con soporte de GCD y Combine.
  • NWPath contiene información completa sobre la conexión: estado, tipos de interfaz, costos, restricciones y gateways.
  • El método start inicia el monitoreo en la cola especificada, pathUpdateHandler recibe actualizaciones de NWPath.
  • Las propiedades isExpensive e isConstrained permiten identificar conexiones tarificadas y restringidas.
  • NWPathMonitor reemplazó a Reachability para iOS 12+, proporcionando una API más rica en Swift.
  • El filtrado por tipo de interfaz se implementa mediante el inicializador con el parámetro requiredInterfaceType.
  • Para operación en segundo plano, el monitoreo debe pausarse y reanudarse al cambiar entre foreground y background.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también