Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check internet connection (iOS 10)

For iOS 9 I was using Reachability public class to check wether the device is connected to the internet or not. I converted my Swift 2 code to Swift 3, and the Reachability doesn't work anymore. Can someone tell me how to check the internet connection on iOS 10? Thanks! Here's the code snippet:

open class Reachability {     class func isConnectedToNetwork() -> Bool {         var zeroAddress = sockaddr_in()         zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))         zeroAddress.sin_family = sa_family_t(AF_INET)         let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {             SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))         }         var flags = SCNetworkReachabilityFlags()         if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {             return false         }         let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0         let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0         return (isReachable && !needsConnection)     } } 
like image 534
LOLXDXPLOL Avatar asked Sep 18 '16 14:09

LOLXDXPLOL


People also ask

How does iOS check Internet connection?

To check if your iOS mobile device is connected to Wi-Fi:From the main screen of your device, look for and open Settings. With Settings open, look for the Wi-Fi field. Off - the Wi-Fi antenna is currently disabled. Not Connected - Wi-Fi is turned on, but your device is not currently connected to a network.

How do I know if my iPhone 10 is connected to Wi-Fi?

Helpful answersCheck in the settings tab Wifi. There you can see a check mark next to the connected WiFi. Also, on the top left, a WiFi icon shows your connectivity and strength to the network. Go to Settings/Wi-Fi and it will display any network it is connected to.


2 Answers

SWIFT 3.0: Here's very simple way to do it:

import SystemConfiguration   protocol Utilities { }  extension NSObject:Utilities{       enum ReachabilityStatus {         case notReachable         case reachableViaWWAN         case reachableViaWiFi     }      var currentReachabilityStatus: ReachabilityStatus {          var zeroAddress = sockaddr_in()         zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)         zeroAddress.sin_family = sa_family_t(AF_INET)          guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {             $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {                 SCNetworkReachabilityCreateWithAddress(nil, $0)             }         }) else {             return .notReachable         }          var flags: SCNetworkReachabilityFlags = []         if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {             return .notReachable         }          if flags.contains(.reachable) == false {             // The target host is not reachable.             return .notReachable         }         else if flags.contains(.isWWAN) == true {             // WWAN connections are OK if the calling application is using the CFNetwork APIs.             return .reachableViaWWAN         }         else if flags.contains(.connectionRequired) == false {             // If the target host is reachable and no connection is required then we'll assume that you're on Wi-Fi...             return .reachableViaWiFi         }         else if (flags.contains(.connectionOnDemand) == true || flags.contains(.connectionOnTraffic) == true) && flags.contains(.interventionRequired) == false {             // The connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs and no [user] intervention is needed             return .reachableViaWiFi         }          else {             return .notReachable         }     }  } 

and then simply you can use it anywhere in your project for example:

  func viewDidLoad(){       print(currentReachabilityStatus != .notReachable) //true connected     } 
like image 30
Jad Avatar answered Sep 22 '22 00:09

Jad


import Foundation import SystemConfiguration  func isInternetAvailable() -> Bool     {         var zeroAddress = sockaddr_in()         zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))         zeroAddress.sin_family = sa_family_t(AF_INET)          let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {             $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in                 SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)             }         }          var flags = SCNetworkReachabilityFlags()         if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {             return false         }         let isReachable = flags.contains(.reachable)         let needsConnection = flags.contains(.connectionRequired)         return (isReachable && !needsConnection)     } 

This works in iOS 10

like image 127
Adnan T. Avatar answered Sep 25 '22 00:09

Adnan T.