Easiest way to detect Internet connection on iOS?

internet-connection, ios, nsurlconnection, reachability

Solution

I did a little more research and I am updating my answer with a more current solution. I am not sure if you have already looked at it but there is a nice sample code provided by Apple.

Download the sample code here

Include the Reachability.h and Reachability.m files in your project. Take a look at ReachabilityAppDelegate.m to see an example on how to determine host reachability, reachability by WiFi, by WWAN etc. For a very simply check of network reachability, you can do something like this

Reachability *networkReachability = [Reachability reachabilityForInternetConnection];   
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];    
if (networkStatus == NotReachable) {        
    NSLog(@"There IS NO internet connection");        
} else {        
     NSLog(@"There IS internet connection");        
}

@BenjaminPiette's: Don't forget to add SystemConfiguration.framework to your project.

Problem

I know this question will appear to be a dupe of many others, however, I don't feel the simple case is well explained here. Coming from an Android and BlackBerry background, making requests through `HTTPUrlConnection` instantly fail if there is no connection available. This seems like completely sane behavior, and I was surprised to find `NSURLConnection` in iOS did not emulate it. I understand that Apple (and others who have extended it) provide a `Reachability` class to assist with determining the network state. I was happy to first see this and fully expected to see something like `bool isNetworkAvailable()`, but instead to my surprise I found a complex system requiring notification registrations and callbacks, and a bunch of seemingly unnecessary details. There must be a better way. My app already gracefully handles connection failures, including no connectivity. The user is notified of the failure, and the app moves on. Thus my requirements are simple: Single, synchronous function I can call before all HTTP requests to determine if I should bother actually sending the request or not. Ideally it requires no set up and just returns a boolean. Is this really not possible on iOS?

Original source

Related problems