Reachability: wat is het, bibliotheek voor netwerkbeschikbaarheid

Auteur: IT Sectr Gepubliceerd: 2026-03-11 Leestijd: 10 min

Reachability — een bibliotheek voor iOS en macOS, gebouwd op het SystemConfiguration-framework, waarmee u de beschikbaarheid van de internetverbinding kunt controleren en de wijzigingen ervan kunt volgen. Volgens Apple Developer Documentation (2025) gebruikt Reachability SCNetworkReachability voor asynchrone netwerkmonitoring. De Reachability-bibliotheek bleef lange tijd de standaard voor iOS-projecten tot de komst van native NWPathMonitor.

Belangrijkste

  • Reachability — een wrapper rond het C-framework SystemConfiguration voor het bewaken van netwerkbeschikbaarheid in iOS en macOS.
  • SCNetworkReachability — een low-level C-API die de bereikbaarheid van een externe host of adres controleert.
  • Verbindingstypen — Reachability onderscheidt Wi-Fi en mobiele data (WWAN) om het gedrag van de app aan te passen.
  • Meldingen — via SCNetworkReachabilitySetCallback abonneert de bibliotheek zich op netwerkwijzigingen met behulp van RunLoop.
  • NWPathMonitor — een modern alternatief voor Reachability, beschikbaar vanaf iOS 12 en aanbevolen door Apple.

Wat is Reachability?

Reachability — is een voorbeeldbibliotheek van Apple die het gebruik van het SystemConfiguration-framework voor netwerkmonitoring demonstreert. De broncode is gepubliceerd in Apple Developer Documentation als voorbeeld, maar de community heeft het aangenomen als standaardtool voor verbindingscontrole in iOS-projecten.

De bibliotheek werkt op basis van SCNetworkReachability — een C-functie uit SystemConfiguration die de bereikbaarheid van een externe host of IP-adres beoordeelt. Bij het maken van Reachability wordt ofwel een hostnaam (bijv. google.com) ofwel een IP-adres opgegeven, en de bibliotheek controleert asynchroon of deze host bereikbaar is via de huidige netwerkinterfaces van het apparaat.

De populariteit van Reachability is te danken aan de eenvoud: maak een instantie, abonneer u op meldingen via NotificationCenter en luister naar kReachabilityChangedNotification. Als antwoord ontvangt de app de status: NotReachable, ReachableViaWiFi of ReachableViaWWAN (mobiele data).

Geschiedenis en status van de bibliotheek

Reachability verscheen voor het eerst in iPhone OS 2 (2008) samen met het SystemConfiguration-framework. Tien jaar lang was het de enige native manier om netwerken te monitoren in iOS. Met de release van iOS 12 en het Network-framework beveelt Apple NWPathMonitor aan als vervanging, maar Reachability wordt nog steeds ondersteund.

Veel wrappers van derden — AFNetworking, Alamofire, AshleyDodd/Reachability.swift — gebruiken het interne SCNetworkReachability-mechanisme. Deze bibliotheken voegen een handige Swift/Objective-C-interface, statusmemoïsie en thread-safe callbacks toe, met behoud van dezelfde SystemConfiguration-basis.

Hoe werkt Reachability onder de motorkap

Het belangrijkste mechanisme van Reachability — de functie SCNetworkReachabilityCreateWithName, die een trackingobject maakt voor de opgegeven host. Vervolgens wordt SCNetworkReachabilityGetFlags aangeroepen — een synchrone controle die een bitmasker SCNetworkReachabilityFlags met de huidige netwerkstatus retourneert.

Voor asynchrone monitoring wordt SCNetworkReachabilitySetCallback gebruikt, die een C-callbackfunctie registreert. De callback wordt uitgevoerd op de huidige RunLoop wanneer de bereikbaarheidsstatus van de host verandert. Reachability wikkelt deze C-callback in een Objective-C-methode en stuurt een melding via NotificationCenter.

swift
import SystemConfiguration

class Reachability {
    private var reachabilityRef: SCNetworkReachability?

    init?(hostname: String) {
        reachabilityRef = SCNetworkReachabilityCreateWithName(
            nil, hostname
        )
    }

    func checkReachability() -> Bool {
        var flags = SCNetworkReachabilityFlags()
        SCNetworkReachabilityGetFlags(
            reachabilityRef!, &flags
        )
        return isReachable(with: flags)
    }

    private func isReachable(with flags: SCNetworkReachabilityFlags) -> Bool {
        let reachable = flags.contains(.reachable)
        let connectionRequired = flags.contains(.connectionRequired)
        return reachable && !connectionRequired
    }
}

Netwerkbereikbaarheidsvlaggen

SCNetworkReachabilityFlags — een bitmasker dat de netwerkstatus codeert. De vlag kSCNetworkReachabilityFlagsReachable geeft aan dat de host bereikbaar is. kSCNetworkReachabilityFlagsConnectionRequired — voor verbinding is het tot stand brengen van communicatie vereist. De combinatie van vlaggen bepaalt of de app gegevens kan verzenden.

Extra vlaggen: kSCNetworkReachabilityFlagsIsWWAN — verbinding via mobiel netwerk (iOS), kSCNetworkReachabilityFlagsInterventionRequired — gebruikersinterventie vereist (bijv. voor VPN). Reachability houdt rekening met deze vlaggen om het interfacetype te bepalen.

Voorbeelden van Reachability-gebruik

Het standaard gebruikspatroon van Reachability in een iOS-app omvat het maken van een instantie, het abonneren op meldingen en reageren op statuswijzigingen. Het onderstaande voorbeeld toont integratie met NotificationCenter voor het bijwerken van de UI bij netwerkwijzigingen.

swift
import Reachability
import UIKit

class ViewController: UIViewController {
    var reachability: Reachability?

    override func viewDidLoad() {
        super.viewDidLoad()
        reachability = Reachability(hostname: "google.com")
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(reachabilityChanged),
            name: .reachabilityChanged,
            object: nil
        )
        reachability?.startNotifier()
    }

    @objc func reachabilityChanged(notification: Notification) {
        if let reachability = notification.object as? Reachability {
            switch reachability.connection {
            case .wifi:
                print("Verbonden via Wi-Fi")
            case .cellular:
                print("Verbonden via mobiel netwerk")
            case .unavailable:
                print("Geen verbinding")
            }
        }
    }
}

Netwerk controleren voor een aanvraag

Voordat u een HTTP-verzoek uitvoert, kunt u de netwerkbeschikbaarheid synchroon controleren: reachability.connection != .unavailable. Dit garandeert geen succes van het verzoek (de server kan onbereikbaar zijn), maar voorkomt gedoemde verzoeken en verbetert de UX — de app toont geen spinner in de offline-modus.

Voor een nauwkeurigere controle combineert u Reachability met URLSession-time-outs. Als Reachability reachable aangeeft maar het verzoek niet binnen de time-out wordt uitgevoerd — ligt het probleem waarschijnlijk aan de serverzijde of een captive portal. In dat geval kunt u de gebruiker een bericht over serveronbereikbaarheid tonen.

Verbindingstypen in Reachability

Reachability onderscheidt drie hoofdverbindingstoestanden: Wi-Fi, mobiele data (WWAN) en onbereikbaarheid. WWAN omvat alle typen mobiele communicatie — 2G, 3G, 4G/LTE, 5G. De bibliotheek biedt geen details binnen WWAN, dus voor het onderscheiden van 4G en 5G is CoreTelephony vereist.

ToestandSCNetwork-vlagBeschrijving
ReachableViaWiFiReachable + !IsWWANVerbinding via Wi-Fi-netwerk met toegang tot host
ReachableViaWWANReachable + IsWWANVerbinding via mobiel netwerk (2G-5G)
NotReachable!ReachableHost niet bereikbaar via enige interface
ConnectionRequiredReachable + ConnectionRequiredVerbinding tot stand brengen vereist (VPN, PPPoE)

Beperkingen van Reachability per netwerktype

Reachability maakt geen onderscheid tussen Ethernet, VPN-tunnels of multipath-verbindingen — alle niet-WWAN-interfaces worden geclassificeerd als Wi-Fi. Deze beperking hangt samen met de architectuur van SystemConfiguration, die geen gedetailleerde informatie over netwerkinterfaces biedt buiten de basisclassificatie.

Voor het bepalen van het specifieke type mobiele communicatie (4G vs 5G) is CTTelephonyNetworkInfo uit CoreTelephony vereist. Het combineren van Reachability met CoreTelephony stelt de app in staat de inhoudskwaliteit te kiezen: bij 5G — 4K-streaming, bij 4G/LTE — HD, bij 3G — SD of alleen audio.

Migratie van Reachability naar NWPathMonitor

Apple beveelt aan om Reachability in alle nieuwe projecten te vervangen door NWPathMonitor, vanaf iOS 12. De belangrijkste reden is dat NWPathMonitor deel uitmaakt van het moderne Network-framework, geschreven in Swift, Combine ondersteunt en gedetailleerde informatie over het netwerkpad biedt zonder C-compatibiliteit.

Het migratieproces omvat het vervangen van SCNetworkReachability door NWPathMonitor, de overstap van NotificationCenter naar pathUpdateHandler-closure of Combine-publisher. Het algoritme en de logica voor netwerkstatusverwerking blijven hetzelfde — alleen de monitoring-API verandert.

swift
protocol NetworkMonitorProtocol {
    var isReachable: Bool { get }
    var connectionType: ConnectionType { get }
    func startMonitoring()
    func stopMonitoring()
}

enum ConnectionType {
    case wifi, cellular, ethernet, unavailable
}

// Moderne implementatie met NWPathMonitor
class ModernNetworkMonitor: NetworkMonitorProtocol {
    private let monitor = NWPathMonitor()
    private let queue = DispatchQueue("Network")
    private var currentPath: NWPath?

    var isReachable: Bool {
        currentPath?.status == .satisfied
    }

    func startMonitoring() {
        monitor.pathUpdateHandler = { [weak self] path in
            self?.currentPath = path
        }
        monitor.start(on: queue)
    }

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

Aanbevelingen voor migratie

Vervang voor projecten met basisondersteuning voor iOS 12+ Reachability volledig door NWPathMonitor. Gebruik voor projecten die iOS 11 ondersteunen conditionele compilatie #available(iOS 12, *) met NWPathMonitor en Reachability als fallback. Dit maakt geleidelijke migratie mogelijk zonder verlies van ondersteuning voor oudere apparaten.

Het belangrijkste voordeel van migratie is de detaillering van het netwerkpad. NWPathMonitor rapporteert niet alleen ‘bereikbaar/onbereikbaar’, maar ook het type van elke interface, de kosten, prioriteit, ondersteuning voor proxy en VPN. Dit geeft de ontwikkelaar meer gegevens om het gedrag van de app aan te passen aan de huidige netwerkomstandigheden.

Veelgestelde vragen

Wat is de minimale iOS-versie die Reachability ondersteunt?

Reachability op SCNetworkReachability is beschikbaar vanaf iPhone OS 2 (iOS 2). De bibliotheek werkt op alle iOS-versies, inclusief de huidige. Beperkingen hebben niet te maken met de OS-versie, maar met de detaillering van informatie — op oudere versies is er geen onderscheid tussen 4G en 5G.

Waarin verschilt Reachability van een eenvoudige ping-controle?

Reachability gebruikt SCNetworkReachability — een systeemservice die de bereikbaarheid van de host op netwerkstackniveau beoordeelt zonder pakketten te verzenden. Ping verzendt ICMP-pakketten en verbruikt verkeer, en kan ook door een firewall worden geblokkeerd. Reachability is sneller en veiliger voor frequente controles.

Kan Reachability worden gebruikt in SwiftUI-projecten?

Ja, Reachability werkt in SwiftUI via ObservableObject of Combine. Wikkel het in een klasse die is geabonneerd op NotificationCenter en publiceer de status via @Published. Voor nieuwe SwiftUI-projecten raden we NWPathMonitor met Combine publisher aan voor reactieve view-updates.

Hoe bepaalt Reachability Wi-Fi versus mobiele data?

Reachability controleert de vlag kSCNetworkReachabilityFlagsIsWWAN in het bitmasker SCNetworkReachabilityFlags. Als de vlag is ingesteld — verbinding via mobiel netwerk (WWAN), zo niet en de host is Reachable — via Wi-Fi. Dit is de enige manier om typen te onderscheiden zonder CoreTelephony.

Waarom geeft Reachability bereikbaarheid aan, maar werken verzoeken niet?

SCNetworkReachability controleert de bereikbaarheid van de host op netwerkniveau, maar garandeert niet de werking van hogerliggende protocollen. Mogelijke oorzaken: captive portal, DNS-blokkade, proxyserver of firewall. Reachability is een eerste filter, maar geen vervanging voor een echt HTTP-verzoek.

Samenvatting

  • Reachability — bibliotheek op SystemConfiguration voor iOS-netwerkmonitoring, werkend via SCNetworkReachability C-API.
  • Drie toestanden — Wi-Fi, mobiele data (WWAN) en onbereikbaarheid — bepaald door bitvlaggen van SCNetworkReachabilityFlags.
  • Asynchrone meldingen gerealiseerd via SCNetworkReachabilitySetCallback met RunLoop en NotificationCenter.
  • Beperkingen — Reachability maakt geen onderscheid tussen 4G/5G, VPN, Ethernet en geeft geen informatie over verkeerskosten.
  • NWPathMonitor — moderne vervanging van Reachability voor iOS 12+, met gedetailleerd NWPath met type, kosten en multipath.
  • Migratie omvat het vervangen van SCNetworkReachability door NWPathMonitor met behoud van logica via het NetworkMonitorProtocol.
  • Reachability blijft nodig voor projecten met ondersteuning voor iOS 11 en lager of voor snelle synchrone controles.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook