¿Cómo comprobar si hay una conexión a Internet activa en iOS o macOS?

Me gustaría comprobar si tengo una conexión a Internet en iOS usando las bibliotecas Cocoa Touch o en macOS usando las bibliotecas Cocoa .

Se me ocurrió una forma de hacer esto usando un NSURL . La forma en que lo hice parece un tanto poco confiable (porque incluso Google podría estar un día decepcionado y depender de un tercero parece malo), y si bien podría verificar si hay respuesta de otros sitios web si Google no respondía, parece derrochador y una carga innecesaria en mi aplicación.

 - (BOOL) connectedToInternet { NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; return ( URLString != NULL ) ? YES : NO; } 

Es lo que he hecho mal, (sin mencionar que stringWithContentsOfURL está en desuso en iOS 3.0 y macOS 10.4) y, de ser así, ¿cuál es la mejor manera de lograrlo?

Importante : esta comprobación siempre debe realizarse de forma asíncrona. La mayoría de las respuestas a continuación son sincrónicas, así que ten cuidado, de lo contrario, congelarás tu aplicación.


Rápido

1) Instalar a través de CocoaPods o Cartago: https://github.com/ashleymills/Reachability.swift

2) Prueba de accesibilidad a través de cierres

 let reachability = 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") } 

C objective

1) Agregue el marco de SystemConfiguration al proyecto, pero no se preocupe por incluirlo en cualquier lugar

2) Agregue la versión de Tony Million de Reachability.h Reachability.m al proyecto (se encuentra aquí: https://github.com/tonymillion/Reachability )

3) Actualiza la sección de interfaz

 #import "Reachability.h" // Add this to the interface in the .m file of your view controller @interface MyViewController () { Reachability *internetReachableFoo; } @end 

4) Luego implementa este método en el archivo .m de tu controlador de vista al que puedes llamar

 // Checks if we have an internet connection or not - (void)testInternetConnection { internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"]; // Internet is reachable internetReachableFoo.reachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Yayyy, we have the interwebs!"); }); }; // Internet is not reachable internetReachableFoo.unreachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Someone broke the internet :("); }); }; [internetReachableFoo startNotifier]; } 

Nota importante: la clase de Reachability es una de las clases más utilizadas en los proyectos, por lo que podría encontrarse con conflictos de nombres con otros proyectos. Si esto sucede, deberá cambiar el nombre de uno de los pares de archivos Reachability.m a otro para resolver el problema.

Nota: El dominio que usa no importa. Solo está probando una puerta de acceso a cualquier dominio.

Me gusta mantener las cosas simples. La forma en que hago esto es:

 //Class.h #import "Reachability.h" #import  - (BOOL)connected; //Class.m - (BOOL)connected { Reachability *reachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [reachability currentReachabilityStatus]; return networkStatus != NotReachable; } 

Luego, uso esto cada vez que quiero ver si tengo una conexión:

 if (![self connected]) { // Not connected } else { // Connected. Do some Internet stuff } 

Este método no espera cambios en los estados de la red para hacer cosas. Simplemente prueba el estado cuando se lo pides.

Utilizando el código de Accesibilidad de Apple, creé una función que verificará esto correctamente sin tener que incluir ninguna clase.

Incluya SystemConfiguration.framework en su proyecto.

Realice algunas importaciones:

 #import  #import  #import  

Ahora solo llame a esta función:

 /* Connectivity testing code pulled from Apple's Reachability Example: https://developer.apple.com/library/content/samplecode/Reachability */ +(BOOL)hasConnectivity { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress); if (reachability != NULL) { //NetworkStatus retVal = NotReachable; SCNetworkReachabilityFlags flags; if (SCNetworkReachabilityGetFlags(reachability, &flags)) { if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { // If target host is not reachable return NO; } if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) { // If target host is reachable and no connection is required // then we'll assume (for now) that your on Wi-Fi return YES; } if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) { // ... and the connection is on-demand (or on-traffic) if the // calling application is using the CFSocketStream or higher APIs. if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) { // ... and no [user] intervention is needed return YES; } } if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { // ... but WWAN connections are OK if the calling application // is using the CFNetwork (CFSocketStream?) APIs. return YES; } } } return NO; } 

Y es iOS 5 probado para ti.

Esta solía ser la respuesta correcta, pero ahora está desactualizada, ya que debería suscribirse a las notificaciones de accesibilidad. Este método comprueba sincrónicamente:


Puedes usar la clase de Accesibilidad de Apple. También le permitirá verificar si Wi-Fi está habilitado:

 Reachability* reachability = [Reachability sharedReachability]; [reachability setHostName:@"www.example.com"]; // Set your host name here NetworkStatus remoteHostStatus = [reachability remoteHostStatus]; if (remoteHostStatus == NotReachable) { } else if (remoteHostStatus == ReachableViaWiFiNetwork) { } else if (remoteHostStatus == ReachableViaCarrierDataNetwork) { } 

La clase de Accesibilidad no se envía con el SDK, sino que forma parte de esta aplicación de ejemplo de Apple . Simplemente descárguelo y copie Reachability.h / m a su proyecto. Además, debe agregar la estructura SystemConfiguration a su proyecto.

Aquí hay una respuesta muy simple:

 NSURL *scriptUrl = [NSURL URLWithString:@"http://www.google.com/m"]; NSData *data = [NSData dataWithContentsOfURL:scriptUrl]; if (data) NSLog(@"Device is connected to the Internet"); else NSLog(@"Device is not connected to the Internet"); 

La URL debe apuntar a un sitio web extremadamente pequeño. Utilizo el sitio web móvil de Google aquí, pero si tuviera un servidor web confiable, cargaría un pequeño archivo con solo un carácter para obtener la máxima velocidad.

Si verificas si el dispositivo está conectado de alguna manera a Internet es todo lo que quieres hacer, definitivamente recomendaría usar esta solución simple. Si necesita saber cómo está conectado el usuario, el uso de Accesibilidad es el camino a seguir.

Cuidado: Esto bloqueará brevemente su hilo mientras carga el sitio web. En mi caso, esto no fue un problema, pero debes considerar esto (créditos a Brad por señalar esto).

Así es como lo hago en mis aplicaciones: mientras que un código de respuesta de 200 estados no garantiza nada, es lo suficientemente estable para mí. Esto no requiere tanta carga como las respuestas NSData publicadas aquí, ya que la mía simplemente verifica la respuesta HEAD.

código SWIFT

 func checkInternet(flag:Bool, completionHandler:(internet:Bool) -> Void) { UIApplication.sharedApplication().networkActivityIndicatorVisible = true let url = NSURL(string: "http://www.appleiphonecell.com/") let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "HEAD" request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData request.timeoutInterval = 10.0 NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in UIApplication.sharedApplication().networkActivityIndicatorVisible = false let rsp = response as! NSHTTPURLResponse? completionHandler(internet:rsp?.statusCode == 200) }) } func yourMethod() { self.checkInternet(false, completionHandler: {(internet:Bool) -> Void in if (internet) { // "Internet" aka Apple's region universal URL reachable } else { // No "Internet" aka Apple's region universal URL un-reachable } }) } 

Código Objective-C

 typedef void(^connection)(BOOL); - (void)checkInternet:(connection)block { NSURL *url = [NSURL URLWithString:@"http://www.appleiphonecell.com/"]; NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url]; headRequest.HTTPMethod = @"HEAD"; NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration ephemeralSessionConfiguration]; defaultConfigObject.timeoutIntervalForResource = 10.0; defaultConfigObject.requestCachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData; NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue: [NSOperationQueue mainQueue]]; NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:headRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (!error && response) { block([(NSHTTPURLResponse *)response statusCode] == 200); } }]; [dataTask resume]; } - (void)yourMethod { [self checkInternet:^(BOOL internet) { if (internet) { // "Internet" aka Apple's region universal URL reachable } else { // No "Internet" aka Apple's region universal URL un-reachable } }]; } 

Apple proporciona un código de muestra para verificar los diferentes tipos de disponibilidad de red. Alternativamente, hay un ejemplo en el libro de cocina de los desarrolladores de iPhone.

Nota: Consulte el comentario de @KHG sobre esta respuesta con respecto al uso del código de accesibilidad de Apple.

Puede usar Reachability por  ( disponible aquí ).

 #import "Reachability.h" - (BOOL)networkConnection { return [[Reachability reachabilityWithHostName:@"www.google.com"] currentReachabilityStatus]; } if ([self networkConnection] == NotReachable) { /* No Network */ } else { /* Network */ } //Use ReachableViaWiFi / ReachableViaWWAN to get the type of connection. 

Apple proporciona una aplicación de muestra que hace exactamente esto:

Accesibilidad

Solo la clase Accesibilidad se ha actualizado. Ahora puede usar:

 Reachability* reachability = [Reachability reachabilityWithHostName:@"www.apple.com"]; NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; if (remoteHostStatus == NotReachable) { NSLog(@"not reachable");} else if (remoteHostStatus == ReachableViaWWAN) { NSLog(@"reachable via wwan");} else if (remoteHostStatus == ReachableViaWiFi) { NSLog(@"reachable via wifi");} 

Una versión de Accesibilidad para iOS 5 es darkseed / Reachability.h . ¡No es mío! =)

Hay una modernización de Alcance muy útil, con ARC y GCD:

Accesibilidad

Si está utilizando AFNetworking , puede usar su propia implementación para el estado de accesibilidad de Internet.

La mejor manera de utilizar AFNetworking es subclase de la clase AFHTTPClient y utilizar esta clase para hacer sus conexiones de red.

Una de las ventajas de utilizar este enfoque es que puede usar blocks para establecer el comportamiento deseado cuando cambia el estado de accesibilidad. Supongamos que he creado una subclase de singleton de AFHTTPClient (como se dice en las “notas de subclases” en los documentos de AFNetworking ) llamada BKHTTPClient , haría algo como:

 BKHTTPClient *httpClient = [BKHTTPClient sharedClient]; [httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { if (status == AFNetworkReachabilityStatusNotReachable) { // Not reachable } else { // Reachable } }]; 

También puede verificar conexiones Wi-Fi o WLAN utilizando específicamente las AFNetworkReachabilityStatusReachableViaWWAN y AFNetworkReachabilityStatusReachableViaWiFi ( más aquí ).

He usado el código en esta discusión , y parece funcionar bien (¡lea todo el hilo!).

No lo he probado exhaustivamente con todos los tipos de conexión concebibles (como Wi-Fi ad hoc).

Muy simple … Pruebe estos pasos:

Paso 1: agregue el marco de SystemConfiguration en su proyecto.


Paso 2: Importe el siguiente código en su archivo de header .

 #import  

Paso 3: usa el siguiente método

  • Tipo 1:

     - (BOOL) currentNetworkStatus { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; BOOL connected; BOOL isConnected; const char *host = "www.apple.com"; SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host); SCNetworkReachabilityFlags flags; connected = SCNetworkReachabilityGetFlags(reachability, &flags); isConnected = NO; isConnected = connected && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired); CFRelease(reachability); return isConnected; } 

  • Tipo 2:

    Importar encabezado : #import "Reachability.h"

     - (BOOL)currentNetworkStatus { Reachability *reachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [reachability currentReachabilityStatus]; return networkStatus != NotReachable; } 

Paso 4: Cómo usar:

 - (void)CheckInternet { BOOL network = [self currentNetworkStatus]; if (network) { NSLog(@"Network Available"); } else { NSLog(@"No Network Available"); } } 
 -(void)newtworkType { NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { dataNetworkItemView = subview; break; } } switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"]integerValue]) { case 0: NSLog(@"No wifi or cellular"); break; case 1: NSLog(@"2G"); break; case 2: NSLog(@"3G"); break; case 3: NSLog(@"4G"); break; case 4: NSLog(@"LTE"); break; case 5: NSLog(@"Wifi"); break; default: break; } } 
 - (void)viewWillAppear:(BOOL)animated { NSString *URL = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; return (URL != NULL ) ? YES : NO; } 

O usa la clase de Accesibilidad .

Hay dos maneras de verificar la disponibilidad de Internet usando el iPhone SDK:

1. Verifique que la página de Google esté abierta o no.

2. clase de alcanzabilidad

Para obtener más información, consulte Alcance (desarrollador de Apple).

Use http://huytd.github.io/datatify/ . Es más fácil que agregar bibliotecas y escribir código usted mismo.

Primero : agregue CFNetwork.framework en el marco

Código : ViewController.m

 #import "Reachability.h" - (void)viewWillAppear:(BOOL)animated { Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"]; NetworkStatus internetStatus = [r currentReachabilityStatus]; if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) { /// Create an alert if connection doesn't work UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"No Internet Connection" message:NSLocalizedString(@"InternetMessage", nil)delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [myAlert show]; [myAlert release]; } else { NSLog(@"INTERNET IS CONNECT"); } } 

Primero descargue la clase de scope y coloque los archivos reachability.h y reachabilty.m en su Xcode .

La mejor manera es crear una clase de Funciones común (NSObject) para que pueda usarla en cualquier clase. Estos son dos métodos para verificar la accesibilidad a la conexión de red:

 +(BOOL) reachabiltyCheck { NSLog(@"reachabiltyCheck"); BOOL status =YES; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; Reachability * reach = [Reachability reachabilityForInternetConnection]; NSLog(@"status : %d",[reach currentReachabilityStatus]); if([reach currentReachabilityStatus]==0) { status = NO; NSLog(@"network not connected"); } reach.reachableBlock = ^(Reachability * reachability) { dispatch_async(dispatch_get_main_queue(), ^{ }); }; reach.unreachableBlock = ^(Reachability * reachability) { dispatch_async(dispatch_get_main_queue(), ^{ }); }; [reach startNotifier]; return status; } +(BOOL)reachabilityChanged:(NSNotification*)note { BOOL status =YES; NSLog(@"reachabilityChanged"); Reachability * reach = [note object]; NetworkStatus netStatus = [reach currentReachabilityStatus]; switch (netStatus) { case NotReachable: { status = NO; NSLog(@"Not Reachable"); } break; default: { if (!isSyncingReportPulseFlag) { status = YES; isSyncingReportPulseFlag = TRUE; [DatabaseHandler checkForFailedReportStatusAndReSync]; } } break; } return status; } + (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { NSLog(@"Error. Could not recover network reachability flags"); return NO; } BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0]; NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:self]; return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO; } 

Ahora puede verificar la conexión de red en cualquier clase llamando a este método de clase.

También hay otro método para verificar la conexión a Internet usando el iPhone SDK.

Intente implementar el siguiente código para la conexión de red.

 #import  #include  /** Checking for network availability. It returns YES if the network is available. */ + (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { printf("Error. Could not recover network reachability flags\n"); return NO; } BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0); BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0); return (isReachable && !needsConnection) ? YES : NO; } 

Hacer esto usted mismo es extremadamente simple. El siguiente método funcionará. Solo asegúrese de no permitir que un protocolo de nombre de host como HTTP, HTTPS, etc. pase con el nombre.

 -(BOOL)hasInternetConnection:(NSString*)urlAddress { SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [urlAddress UTF8String]); SCNetworkReachabilityFlags flags; if (!SCNetworkReachabilityGetFlags(ref, &flags)) { return NO; } return flags & kSCNetworkReachabilityFlagsReachable; } 

Es rápido, simple e indoloro.

Me pareció simple y fácil de usar la biblioteca SimplePingHelper .

Código de muestra: chrishulbert / SimplePingHelper ( GitHub )

La clase Accesibilidad está bien para averiguar si la conexión a Internet está disponible para un dispositivo o no …

Pero en caso de acceder a un recurso de intranet :

Hacer ping al servidor de intranet con la clase de accesibilidad siempre devuelve verdadero.

Entonces, una solución rápida en este escenario sería crear un método web llamado pingme junto con otros métodos web en el servicio. El pingme debería devolver algo.

Así que escribí el siguiente método sobre funciones comunes

 -(BOOL)PingServiceServer { NSURL *url=[NSURL URLWithString:@"http://www.serveraddress/service.asmx/Ping"]; NSMutableURLRequest *urlReq=[NSMutableURLRequest requestWithURL:url]; [urlReq setTimeoutInterval:10]; NSURLResponse *response; NSError *error = nil; NSData *receivedData = [NSURLConnection sendSynchronousRequest:urlReq returningResponse:&response error:&error]; NSLog(@"receivedData:%@",receivedData); if (receivedData !=nil) { return YES; } else { NSLog(@"Data is null"); return NO; } } 

El método anterior fue muy útil para mí, así que cada vez que trato de enviar datos al servidor, siempre verifico la accesibilidad de mi recurso de intranet usando esta URLRequest de tiempo de espera bajo.

Creo que esta es la mejor respuesta.

“Sí” significa conectado. “No” significa desconectado.

 #import "Reachability.h" - (BOOL)canAccessInternet { Reachability *IsReachable = [Reachability reachabilityForInternetConnection]; NetworkStatus internetStats = [IsReachable currentReachabilityStatus]; if (internetStats == NotReachable) { return NO; } else { return YES; } } 
  1. Descargue el archivo de Accesibilidad, https://gist.github.com/darkseed/1182373

  2. Y agregue CFNetwork.framework y ‘SystemConfiguration.framework’ en el marco

  3. Haz #importar “Reachability.h”

Primero : agregue CFNetwork.framework en el marco

Código : ViewController.m

 - (void)viewWillAppear:(BOOL)animated { Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"]; NetworkStatus internetStatus = [r currentReachabilityStatus]; if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) { /// Create an alert if connection doesn't work UIAlertView *myAlert = [[UIAlertView alloc]initWithTitle:@"No Internet Connection" message:NSLocalizedString(@"InternetMessage", nil)delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [myAlert show]; [myAlert release]; } else { NSLog(@"INTERNET IS CONNECT"); } } 

Import Reachable.h class in your ViewController , and use the following code to check connectivity :

  #define hasInternetConnection [[Reachability reachabilityForInternetConnection] isReachable] if (hasInternetConnection){ // To-do block } 

Apart from reachability you may also use the Simple Ping helper library . It works really nice and is simple to integrate.

  • Step 1: Add the Reachability class in your Project.
  • Step 2: Import the Reachability class
  • Step 3: Create the below function

     - (BOOL)checkNetConnection { self.internetReachability = [Reachability reachabilityForInternetConnection]; [self.internetReachability startNotifier]; NetworkStatus netStatus = [self.internetReachability currentReachabilityStatus]; switch (netStatus) { case NotReachable: { return NO; } case ReachableViaWWAN: { return YES; } case ReachableViaWiFi: { return YES; } } } 
  • Step 4: Call the function as below:

     if (![self checkNetConnection]) { [GlobalFunctions showAlert:@"" message:@"Please connect to the Internet!" canBtntitle:nil otherBtnTitle:@"Ok"]; return; } else { Log.v("internet is connected","ok"); } 

Checking the Internet connection availability in (iOS) Xcode 8 , Swift 3.0

This is simple method for checking the network availability like our device is connected to any network or not. I have managed to translate it to Swift 3.0 and here the final code. The existing Apple Reachability class and other third party libraries seemed to be too complicated to translate to Swift.

This works for both 3G,4G and WiFi connections.

Don’t forget to add “SystemConfiguration.framework” to your project builder.

 //Create new swift class file Reachability in your project. import SystemConfiguration public class InternetReachability { class func isConnectedToNetwork() -> Bool { var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer(&zeroAddress) { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue() } var flags: SCNetworkReachabilityFlags = 0 if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 { return false } let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0 let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 return isReachable && !needsConnection } } // Check network connectivity from anywhere in project by using this code. if InternetReachability.isConnectedToNetwork() == true { print("Internet connection OK") } else { print("Internet connection FAILED") } 
    Intereting Posts