GTNetMon is a lightweight Swift library that detects whether a device is connected to Internet, it identifies the connection type (wifi, cellular, and more), and monitors for changes in the network status. For both iOS & macOS.
Do you want GTNetMon as a pod? Check this out.
To integrate GTNetMon
into your projects follow the next steps:
- Copy the repository's URL to GitHub.
- Open your project in Xcode.
- Go to menu File > Swift Packages > Add Package Dependency....
- Paste the URL, select the package when it appears and click Next.
- In the Rules leave the default option selected (Up to Next Major) and click Next.
- Finally select the GTNetMon-Swift-Package package and select the Target to add to; click Finish.
Use GTNetMon
singleton class to access all publicly available properties and methods through its shared
instance.
Available properties are:
isConnected
: Indicates whether the device is connected to Internet or not.connectionType
: The connection type as aGTNetMon.ConnectionType
value (see next).availableConnectionTypes
: A collection of the available connection types to the device at a given moment.isExpensive
: An indication that the connection is expensive while the device is connected to Internet through cellular network. Note that this flag is more accurate when used in iOS versions >= 12.0.isMonitoring
: It indicates whether network status changes are being monitored or not.
In addition to the above, there are the following two methods:
startMonitoring()
: It starts monitoring for network status changes.stopMonitoring()
: It stops monitoring for network status changes.
- It is recommended to start and stop monitoring in the
applicationDidBecomeActive(_:)
andapplicationWillResignActive(_:)
methods of the AppDelegate class respectively. - Classes that want to be notified about monitored network status changes should observe for the
GTNetMonNetworkStatusChangeNotification
notification. It is posted whenever a change in the connection occurs.
Start and stop monitoring in the AppDelegate.swift file:
func applicationDidBecomeActive(_ application: UIApplication) {
GTNetMon.shared.startMonitoring()
}
func applicationWillResignActive(_ application: UIApplication) {
GTNetMon.shared.stopMonitoring()
}
A simple view controller sample implementation that monitors for network changes:
import UIKit
import GTNetMon
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Observe for the GTNetMonNetworkStatusChangeNotification notification.
NotificationCenter.default.addObserver(self, selector: #selector(handleStatusChange(notification:)), name: .GTNetMonNetworkStatusChangeNotification, object: nil)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
showConnectionInfo()
}
deinit {
NotificationCenter.default.removeObserver(self)
}
@objc func handleStatusChange(notification: Notification) {
self.showConnectionInfo()
}
func showConnectionInfo() {
print("Is connected: \(GTNetMon.shared.isConnected)")
"\nAvailable Connection Types:"
for type in GTNetMon.shared.availableConnectionTypes {
print(type.toString())
}
print("\n\nCurrent Connection Type: \(GTNetMon.shared.connectionType.toString())")
print("Is Expensive: \(GTNetMon.shared.isExpensive)")
}
}
GTNetMon.ConnectionType
is an enum with the following cases:
- wifi
- cellular
- wiredEthernet
- other
- undefined
In iOS >= 12.0, the new Network
framework of the iOS SDK is used to retrieve network information. In older iOS versions, SCNetworkReachability
API is used instead.
Current up-to-date version is 1.0.3.
GTNetMon is licensed under the MIT license.