Replacement for Apple's Reachability re-written in Swift with closures
Reachability.swift
Reachability.swift is a replacement for Apple’s Reachability sample, re-written in Swift with closures.
It is compatible with iOS (8.0 – 12.0), OSX (10.9 – 10.14) and tvOS (9.0 – 12.0)
Inspired by https://github.com/tonymillion/Reachability
Supporting Reachability.swift
Keeping Reachability.swift up-to-date is a time consuming task. Making updates, reviewing pull requests, responding to issues and answering emails all take time.
Please consider sponsoring me https://github.com/sponsors/ashleymills, it’s a great way to say thanks!
If you’re an iOS developer who’s looking for a quick and easy way to create App Store screenshots, please try out my app Screenshot Producer…
Devices | Layout | Copy | Localize | Export |
---|---|---|---|---|
And don’t forget to ★ the repo. This increases its visibility and encourages others to contribute.
Thanks Ash
Got a problem?
Please read https://github.com/ashleymills/Reachability.swift/blob/master/CONTRIBUTING.md before raising an issue.
Installation
Manual
Just drop the Reachability.swift file into your project. That’s it!
CocoaPods
CocoaPods is a dependency manager for Cocoa projects. To install Reachability.swift with CocoaPods:
-
Make sure CocoaPods is installed.
-
Update your Podfile to include the following:
use_frameworks! pod 'ReachabilitySwift'
-
Run
pod install
.
- In your code import Reachability like so:
import Reachability
Carthage
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To install Reachability.swift with Carthage:
- Install Carthage via Homebrew
$ brew update
$ brew install carthage
-
Add
github "ashleymills/Reachability.swift"
to your Cartfile. -
Run
carthage update
. -
Drag
Reachability.framework
from theCarthage/Build/iOS/
directory to theLinked Frameworks and Libraries
section of your Xcode project’sGeneral
settings. -
Add
$(SRCROOT)/Carthage/Build/iOS/Reachability.framework
toInput Files
of Run Script Phase for Carthage. -
In your code import Reachability like so:
import Reachability
Swift Package Manager (SPM)
The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. To integrate using Apple’s Swift package manager from xcode :
-
File -> Swift Packages -> Add Package Dependency…
-
Enter package URL : https://github.com/ashleymills/Reachability.swift, choose the latest release
Example – closures
NOTE: All closures are run on the main queue.
//declare this property where it won't go out of scope relative to your listener
let reachability = try! Reachability()
reachability.whenReachable = { reachability in
if reachability.connection == .wifi {
print("Reachable via WiFi")
} else {
print("Reachable via Cellular")
}
}
reachability.whenUnreachable = { _ in
print("Not reachable")
}
do {
try reachability.startNotifier()
} catch {
print("Unable to start notifier")
}
and for stopping notifications
reachability.stopNotifier()
Example – notifications
NOTE: All notifications are delivered on the main queue.
//declare this property where it won't go out of scope relative to your listener
let reachability = try! Reachability()
//declare this inside of viewWillAppear
NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability)
do{
try reachability.startNotifier()
}catch{
print("could not start reachability notifier")
}
and
@objc func reachabilityChanged(note: Notification) {
let reachability = note.object as! Reachability
switch reachability.connection {
case .wifi:
print("Reachable via WiFi")
case .cellular:
print("Reachable via Cellular")
case .unavailable:
print("Network not reachable")
}
}
and for stopping notifications
reachability.stopNotifier()
NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability)
Want to help?
Got a bug fix, or a new feature? Create a pull request and go for it!
Let me know!
If you use Reachability.swift, please let me know about your app and I’ll put a link here… and tell your friends!
Cheers, Ash