NWPathMonitor: τι είναι, παρακολούθηση δικτύου και εργασία στο iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-10 Χρόνος ανάγνωσης: 9 λεπ

NWPathMonitor — μια κλάση από το πλαίσιο Network σε iOS και macOS για την παρακολούθηση της κατάστασης της διαδρομής δικτύου της συσκευής. Σύμφωνα με το Apple Developer Documentation (2025), το NWPathMonitor επιτρέπει στην εφαρμογή να παρακολουθεί τη διαθεσιμότητα δικτύου, να καθορίζει τον τύπο διεπαφής και να αντιδρά σε αλλαγές σύνδεσης. NWPathMonitor παρέχει πληροφορίες σχετικά με τον τύπο σύνδεσης, το κόστος κίνησης και τη διαθεσιμότητα διαδικτύου μέσω ενός βολικού callback με NWPath.

Κύρια σημεία

  • NWPathMonitor — μια κλάση του πλαισίου Network για ασύγχρονη παρακολούθηση της διαδρομής δικτύου σε iOS και macOS.
  • NWPath περιέχει πληροφορίες σχετικά με τη διαθεσιμότητα δικτύου, τον τύπο διεπαφής (Wi-Fi, δεδομένα κινητού, Ethernet) και την κατάσταση κόστους.
  • Η μέθοδος start ξεκινά την παρακολούθηση στην καθορισμένη ουρά dispatch queue, η μέθοδος cancel τη σταματά.
  • Η ιδιότητα pathUpdateHandler — closure που καλείται σε κάθε αλλαγή κατάστασης της διαδρομής δικτύου.
  • NWPathMonitor υποστηρίζει φιλτράρισμα ανά απαιτούμενο τύπο διεπαφής μέσω της παραμέτρου requiredInterfaceType.

Τι είναι το NWPathMonitor;

NWPathMonitor — είναι μια κλάση από το πλαίσιο Network, που εισήχθη από την Apple στο iOS 12 και macOS 10.14 Mojave. Παρέχει ένα σύγχρονο API για την παρακολούθηση αλλαγών στη διαδρομή δικτύου της συσκευής — του συνδυασμού διεπαφών δικτύου μέσω των οποίων διέρχεται η κίνηση της εφαρμογής.

Πριν από το iOS 12, για την παρακολούθηση δικτύου χρησιμοποιούνταν η βιβλιοθήκη Reachability, χτισμένη στο C-πλαίσιο SystemConfiguration. Το NWPathMonitor είναι μια εγγενής εναλλακτική Swift με πλουσιότερο API, υποστήριξη για σύγχρονους τύπους συνδέσεων (VPN, multipath, LTE, 5G) και ενσωματωμένη εργασία με GCD.

Η βασική διαφορά μεταξύ NWPathMonitor και Reachability — το αντικείμενο NWPath παρέχει όχι μόνο μια δυαδική κατάσταση “διαθέσιμο/μη διαθέσιμο”, αλλά μια πλήρη εικόνα της διαδρομής: τις χρησιμοποιούμενες διεπαφές, την προτεραιότητά τους, το κόστος, την κατάσταση περιαγωγής και τη δυνατότητα proxy και VPN. Ο προγραμματιστής λαμβάνει ολοκληρωμένες πληροφορίες για τη λήψη αποφάσεων σχετικά με αιτήματα δικτύου.

Ιστορία εμφάνισης του πλαισίου Network

Το πλαίσιο Network εμφανίστηκε ως ένα σύγχρονο υποκατάστατο των χαμηλού επιπέδου C-API — CFStream και BSD Sockets. Παρέχει μια ενοποιημένη διεπαφή για επικοινωνία δικτύου σε όλες τις πλατφόρμες Apple, συμπεριλαμβανομένων των watchOS και tvOS. Το NWPathMonitor είναι μέρος αυτού του πλαισίου μαζί με τα NWConnection, NWListener και NWBrowser.

Το πλαίσιο Network είναι γραμμένο σε Swift και χρησιμοποιεί GCD για ασύγχρονη επεξεργασία. Αυτό σημαίνει ότι τα callback του NWPathMonitor εκτελούνται στην καθορισμένη ουρά dispatch queue, ενσωματώνοντας την υπάρχουσα αρχιτεκτονική πολλαπλών νημάτων της εφαρμογής χωρίς χειροκίνητη διαχείριση νημάτων.

Πώς να χρησιμοποιήσετε το NWPathMonitor στην εφαρμογή

Η χρήση του NWPathMonitor ξεκινά με τη δημιουργία μιας παρουσίας της κλάσης και τη ρύθμιση του χειριστή pathUpdateHandler. Στη συνέχεια καλείται η μέθοδος start με καθορισμό της ουράς dispatch queue στην οποία θα εκτελείται το closure. Η διακοπή της παρακολούθησης γίνεται με τη μέθοδο cancel, η οποία επίσης απελευθερώνει πόρους.

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("Δίκτυο διαθέσιμο")
            } else {
                print("Δίκτυο μη διαθέσιμο")
            }
        }
        monitor.start(on: queue)
    }

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

Εργασία με τον τύπο διεπαφής

Το NWPathMonitor μπορεί να ρυθμιστεί ώστε να παρακολουθεί μόνο έναν συγκεκριμένο τύπο διεπαφής. Για αυτό χρησιμοποιείται ο αρχικοποιητής NWPathMonitor(requiredInterfaceType:) με την παράμετρο NWInterface.InterfaceType — .wifi, .cellular, .wiredEthernet ή .loopback. Εάν ο τύπος δεν έχει καθοριστεί, η παρακολούθηση γίνεται για όλες τις διεπαφές.

Πρακτικό παράδειγμα: μια εφαρμογή ροής μπορεί να παρακολουθεί μόνο το Wi-Fi και να προειδοποιεί τον χρήστη για μετάβαση σε δεδομένα κινητού. Ο έλεγχος isConstrained και isExpensive στο NWPath επιτρέπει τον προσδιορισμό του εάν η τρέχουσα σύνδεση χρεώνεται ή είναι περιορισμένη σε ταχύτητα.

Κύκλος ζωής της παρακολούθησης

Η παρακολούθηση πρέπει να ξεκινά κατά την εκκίνηση της εφαρμογής ή κατά την είσοδο σε πρώτο πλάνο και να σταματά κατά τη μετάβαση σε δεύτερο πλάνο. Συνιστάται η δημιουργία μιας παρουσίας NWPathMonitor για ολόκληρη την εφαρμογή (singleton) και η χρήση της από διαφορετικές ενότητες μέσω ενός πρωτοκόλλου ή επιπέδου υπηρεσιών.

Ιδιότητες και δυνατότητες του NWPath

NWPath — το αντικείμενο που μεταβιβάζεται στο pathUpdateHandler, το οποίο περιγράφει την τρέχουσα κατάσταση της διαδρομής δικτύου. Περιέχει πέντε βασικές ιδιότητες που καλύπτουν τα περισσότερα σενάρια παρακολούθησης δικτύου. NWPath.Status — μια απαρίθμηση με τρεις καταστάσεις: satisfied (διαθέσιμο), unsatisfied (μη διαθέσιμο) και requiresConnection (απαιτεί σύνδεση).

ΙδιότηταΤύποςΠεριγραφή
statusNWPath.StatusΤρέχουσα κατάσταση διαδρομής: satisfied, unsatisfied, requiresConnection
availableInterfaces[NWInterface]Λίστα όλων των διαθέσιμων διεπαφών δικτύου
gateways[NWEndpoint]Λίστα πυλών που χρησιμοποιούνται για δρομολόγηση
isExpensiveBoolTrue εάν η σύνδεση χρεώνεται (δεδομένα κινητού, προσωπικό hotspot)
isConstrainedBoolTrue εάν η σύνδεση είναι περιορισμένη σε ταχύτητα (Λειτουργία Χαμηλών Δεδομένων)

Έλεγχος κόστους και περιορισμών

Η ιδιότητα isExpensive — μια κρίσιμης σημασίας σημαία για εφαρμογές που εργάζονται με μεγάλους όγκους δεδομένων. Εάν isExpensive = true, η εφαρμογή πρέπει να μειώσει την ποιότητα ροής, να αναβάλει τη λήψη ενημερώσεων ή να προειδοποιήσει τον χρήστη. Το isConstrained υποδεικνύει ενεργοποιημένη Λειτουργία Χαμηλών Δεδομένων.

Για τον έλεγχο της διαθεσιμότητας διαδικτύου (όχι μόνο δικτύου) χρησιμοποιείται η μέθοδος usesInterfaceType. Εάν η συσκευή είναι συνδεδεμένη σε Wi-Fi χωρίς διαδίκτυο — το NWPath μπορεί να εμφανίζει satisfied, αλλά η πραγματική πρόσβαση απουσιάζει. Σε τέτοιες περιπτώσεις απαιτείται πρόσθετη επικύρωση μέσω NWConnection.

Παραδείγματα υλοποίησης NWPathMonitor

Ας εξετάσουμε μια προηγμένη υλοποίηση NWPathMonitor με διαχείριση κόστους, τύπων διεπαφής και ειδοποίηση του ViewModel μέσω publisher. Στο παράδειγμα χρησιμοποιείται το πλαίσιο Combine για αντιδραστική ενημέρωση του UI κατά την αλλαγή κατάστασης δικτύου.

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
    }
}

Διαχείριση απώλειας δικτύου με καθυστερημένη ενέργεια

Κατά την απώλεια σύνδεσης μπορεί να απαιτείται όχι μόνο ειδοποίηση του UI, αλλά και εκτέλεση καθυστερημένων ενεργειών — για παράδειγμα, αποθήκευση ενός προσχεδίου αιτήματος για μεταγενέστερη αποστολή. Υλοποιήστε μια ουρά καθυστερημένων αιτημάτων που συσσωρεύει λειτουργίες σε κατάσταση unsatisfied και τις αποστέλλει κατά την αποκατάσταση του satisfied.

Για αυτήν την εργασία, το μοτίβο ReachabilityManager με εκπρόσωπο είναι ιδανικό: το NWPathMonitor ειδοποιεί τον διαχειριστή, ο διαχειριστής ενημερώνει την ουρά και το UI. Κατά την αλλαγή κατάστασης σε satisfied, η ουρά αδειάζει αυτόματα και το UI λαμβάνει ένδειξη αποκατάστασης της σύνδεσης.

NWPathMonitor vs Reachability

Πριν από την εμφάνιση του NWPathMonitor, η τυπική λύση για παρακολούθηση δικτύου στο iOS ήταν η βιβλιοθήκη Reachability της Apple (παράδειγμα από την τεκμηρίωση), χτισμένη στο SystemConfiguration. Οι κύριες διαφορές: Η Reachability λειτουργεί μέσω SCNetworkReachability σε C, δεν υποστηρίζει σύγχρονους τύπους δικτύου και δίνει μόνο μια δυαδική απάντηση σχετικά με τη διαθεσιμότητα.

Το NWPathMonitor λύνει αυτούς τους περιορισμούς: είναι γραμμένο σε Swift, υποστηρίζει VPN, multipath, 5G και LTE, παρέχει λεπτομερείς πληροφορίες για κάθε διεπαφή και λειτουργεί ασύγχρονα μέσω GCD. Η Reachability εξακολουθεί να χρησιμοποιείται σε έργα με ελάχιστη υποστήριξη για iOS 11 και παλαιότερα.

ΧαρακτηριστικόNWPathMonitorReachability
Ελάχιστη έκδοσηiOS 12iOS 2
ΓλώσσαSwift (Network)C (SystemConfiguration)
Τύποι διεπαφώνWi-Fi, Cellular, Ethernet, VPNWi-Fi, WWAN (γενικό)
isExpensiveΥπάρχειΔεν υπάρχει
ΑσύγχρονοGCD (dispatch queue)RunLoop
Πολλαπλές διεπαφέςΥπάρχει (multipath)Δεν υπάρχει

Πότε να χρησιμοποιήσετε το Reachability

Εάν η εφαρμογή σας υποστηρίζει iOS 11 και παλαιότερα, το Reachability παραμένει η μόνη επιλογή. Για έργα iOS 12+ συνιστάται η άμεση χρήση του NWPathMonitor — ενσωματώνεται καλύτερα με σύγχρονο κώδικα Swift, Combine και SwiftUI.

Η μετάβαση από Reachability σε NWPathMonitor είναι απλή: αρκεί να αντικαταστήσετε τις κλήσεις SCNetworkReachability με NWPathMonitor, διατηρώντας την ίδια λογική επεξεργασίας. Το επίπεδο αφαίρεσης (πρωτόκολλο NetworkMonitorProtocol) θα επιτρέψει την εναλλαγή μεταξύ υλοποιήσεων χωρίς αλλαγή της επιχειρηματικής λογικής της εφαρμογής.

Συχνές Ερωτήσεις

Ποια είναι η ελάχιστη έκδοση iOS που απαιτείται για το NWPathMonitor;

Το NWPathMonitor είναι διαθέσιμο από iOS 12.0, macOS 10.14, watchOS 5.0 και tvOS 12.0. Για έργα που υποστηρίζουν παλαιότερες εκδόσεις, χρησιμοποιήστε το Reachability από το SystemConfiguration ή βιβλιοθήκες περιτυλίγματος με υπό όρους μεταγλώττιση μέσω #available.

Ποια είναι η διαφορά μεταξύ NWPath.Status.satisfied και unsatisfied;

Satisfied σημαίνει ότι η κίνηση μπορεί να διέλθει μέσω τουλάχιστον μιας διεπαφής. Unsatisfied — καμία διεπαφή δεν είναι διαθέσιμη. Η κατάσταση requiresConnection — η διαδρομή απαιτεί εγκατάσταση σύνδεσης (π.χ. το VPN δεν είναι συνδεδεμένο) και η κίνηση προσωρινά δεν διέρχεται.

Πώς να προσδιορίσετε τον τύπο δικτύου — Wi-Fi ή κινητό;

Χρησιμοποιήστε τη μέθοδο usesInterfaceType στο NWPath: path.usesInterfaceType(.wifi) για Wi-Fi, path.usesInterfaceType(.cellular) για δεδομένα κινητού. Η μέθοδος επιστρέφει true εάν η τρέχουσα κίνηση διέρχεται μέσω του καθορισμένου τύπου διεπαφής.

Πρέπει να ακυρωθεί το NWPathMonitor κατά τη μετάβαση σε δεύτερο πλάνο;

Συνιστάται η παύση της παρακολούθησης στο δεύτερο πλάνο για εξοικονόμηση μπαταρίας. Η κλήση monitor.cancel() στο applicationDidEnterBackground και η επανεκκίνηση στο applicationWillEnterForeground μειώνουν την κατανάλωση ενέργειας. Για κρίσιμες λειτουργίες, χρησιμοποιήστε το Background Task.

Πώς να χειριστείτε τις δεσμευμένες πύλες με το NWPathMonitor;

Το NWPathMonitor μπορεί να εμφανίζει satisfied ακόμη και σε δεσμευμένη πύλη. Για τον προσδιορισμό της πραγματικής πρόσβασης στο διαδίκτυο, εκτελέστε ένα αίτημα HTTP σε αξιόπιστο τελικό σημείο μέσω NWConnection. Εάν ληφθεί ανακατεύθυνση — η πύλη είναι ενεργή, απαιτείται εξουσιοδότηση στο WebView.

Σύνοψη

  • NWPathMonitor — μια κλάση του πλαισίου Network για παρακολούθηση διαδρομής δικτύου σε iOS 12+ με υποστήριξη GCD και Combine.
  • NWPath περιέχει πλήρεις πληροφορίες σχετικά με τη σύνδεση: κατάσταση, τύπους διεπαφών, κόστος, περιορισμούς και πύλες.
  • Η μέθοδος start ξεκινά την παρακολούθηση στην καθορισμένη ουρά, το pathUpdateHandler λαμβάνει ενημερώσεις NWPath.
  • Οι ιδιότητες isExpensive και isConstrained επιτρέπουν τον προσδιορισμό χρεώσιμων και περιορισμένων συνδέσεων.
  • NWPathMonitor αντικατέστησε το Reachability για iOS 12+, παρέχοντας πλουσιότερο API σε Swift.
  • Φιλτράρισμα ανά τύπο διεπαφής υλοποιείται μέσω αρχικοποιητή με παράμετρο requiredInterfaceType.
  • Για εργασία σε δεύτερο πλάνο η παρακολούθηση πρέπει να τίθεται σε παύση και να συνεχίζεται κατά τη μετάβαση μεταξύ πρώτου και δεύτερου πλάνου.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης