NWReachability
NWReachability is a pure Swift library for monitoring the network connection of iOS devices using Apple's Network framework.
-
Latest release: version 1.1.1
-
Requirements: iOS 13.0~ / Swift 5.0~
-
Combine Support
Installation
CocoaPods
CocoaPods is a dependency manager for Cocoa projects. To install NWReachability with CocoaPods:
-
Make sure CocoaPods is installed.
-
Update your Podfile to include the following:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '13.0' use_frameworks! target 'YourApp' do # your other pod # ... pod 'NWReachability', '~> 1.1.0' end
-
Run
pod install
.
- In your code import NWReachability like so:
import NWReachability
import Combine
Swift Package Manager
- File > Swift Packages > Add Package Dependency
- Add
https://github.com/aresxin/NWReachability.git
- Select "Up to Next Major" with "1.1.1"
Usage
Example - notifications
NOTE: All notifications are delivered on the main queue.
let token = NWReachability.default.addObserver { [weak self] connectivity in
print("connectivity isConnected \(connectivity.isConnected)")
print("connectivity isExpensive \(connectivity.isExpensive)")
switch connectivity.status {
case .reachable(.cellular):
print("cellular")
case .notReachable:
print("notReachable")
case .reachable(.ethernetOrWiFi):
print("ethernetOrWiFi")
case .unknown:
print("unknown")
}
}
NWReachability.default.startMonitoring()
and for stopping notifications
NWReachability.default.stopMonitoring()
NotificationCenter.default.removeObserver(token as Any)
Example - Combine
NWReachability.default.publisher.sink { [weak self] connectivity in
print("connectivity isConnected \(connectivity.isConnected)")
print("connectivity isExpensive \(connectivity.isExpensive)")
switch connectivity.status {
case .reachable(.cellular):
print("cellular")
case .notReachable:
print("notReachable")
case .reachable(.ethernetOrWiFi):
print("ethernetOrWiFi")
case .unknown:
print("unknown")
}
}.store(in: &cancellables)
NWReachability.default.startMonitoring()
and for stopping
NWReachability.default.stopMonitoring()
cancellables.removeAll()