{"id":4365,"date":"2010-09-13T16:48:37","date_gmt":"2010-09-13T14:48:37","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=4365"},"modified":"2010-10-01T21:03:07","modified_gmt":"2010-10-01T19:03:07","slug":"t070-controllare-le-connessioni-disponibili-nelle-nostre-applicazioni-iphone","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t070-controllare-le-connessioni-disponibili-nelle-nostre-applicazioni-iphone\/","title":{"rendered":"T#070 &#8211; Controllare le connessioni disponibili nelle nostre applicazioni iPhone"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07b.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07b.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 07b\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07b\" width=\"54\" height=\"100\" class=\"alignleft size-full wp-image-4374\" \/><\/a> Eccoci con un nuovo tutorial dedicato alla programmazione per iPhone SDK. In questo appuntamento vedremo come controllare le connessioni disponibili nel nostro dispositivo, operazione molto importante in tutte le applicazioni che devono accedere, per qualsiasi motivo, alla rete. Vedremo come utilizzare la classe &#8220;<em>Reachability<\/em>&#8221; (messa a disposizione da Apple), per testare se \u00e8 attiva una connessione <em>WiFi<\/em> o <em>3G<\/em>. Piccola nota, in questo tutorial parleremo sempre di connessione 3G, sarebbe pi\u00f9 corretto parlare di connessione dati (potrebbe essere anche una semplice connessione EDGE), ma per semplicit\u00e0 utilizzeremo sempre la dicitura 3G. Buon tutorial a tutti allora!<!--more--><\/p>\n<h4>1. Creiamo il nostro progetto<\/h4>\n<p>In questo tutorial l\u2019aspetto grafico dell\u2019applicazione non sar\u00e0 rilevante, infatti servir\u00e0 solo per mostrare le connessioni disponibili. Iniziamo creando un nuovo progetto di tipo \u201cView-based Application\u201d e chiamiamolo \u201cControllaConnessioni\u201d.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-01.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 01\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-01\" width=\"450\" height=\"374\" class=\"aligncenter size-full wp-image-4367\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-01.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-01-300x249.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-01-150x124.jpg 150w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Apriamo il file \u201cControllaConnessioniViewController.h\u201d e definiamo i seguenti oggetti:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n \r\n@interface ControllaConnessioniViewController : UIViewController {\r\n IBOutlet UILabel *labelWifi;\r\n IBOutlet UILabel *label3g;\r\n}\r\n \r\n-(IBAction)eseguiControllo;\r\n \r\n@end\r\n<\/pre>\n<p>Abbiamo definito due UILabel e un\u2019azione IBAction, che andremo poi a collegare con degli oggetti che inseriremo in Interface Builder.<\/p>\n<p>Salviamo il file e apriamo \u201cControllaConnessioniViewController.xib\u201d. Definiamo una struttura a nostro piacere, l\u2019importante \u00e8 che ci siano due label (una per la connessione WiFi e una per quella 3G) e un bottone, che dovr\u00e0 avviare il controllo delle connessioni. Ecco come ho impostato io l\u2019aspetto grafico:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-02.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 02\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-02\" width=\"400\" height=\"582\" class=\"aligncenter size-full wp-image-4368\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-02.jpg 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-02-206x300.jpg 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-02-103x150.jpg 103w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Selezioniamo il \u201cFile\u2019s Owner\u201d e dal pannello \u201cConnections Inspector\u201d colleghiamo \u201clabelWifi\u201d e \u201clabel3g\u201d con le rispettive label, mentre associate l\u2019azione \u201ceseguiControllo\u201d con il bottone. Se avete eseguito tutto correttamente avrete un pannello come questo:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-03.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 03\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-03\" width=\"301\" height=\"243\" class=\"aligncenter size-full wp-image-4369\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-03.jpg 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-03-300x242.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-03-150x121.jpg 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Possiamo salvare e chiudere Interface Builder.<\/p>\n<h4>2. Aggiungiamo la classe \u201cReachability\u201d<\/h4>\n<p>Dobbiamo ora scaricare la classe \u201cReachability\u201d messa a disposizione da Apple e inserirla nel nostro progetto. Scaricate l\u2019esempio \u201cReachability\u201d presente nel Developer Connections (link diretto). Estratelo e copiate i due file \u201cReachability.h\u201d e \u201cReachability.m\u201d all\u2019interno del vostro progetto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-04.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 04\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-04\" width=\"450\" height=\"293\" class=\"aligncenter size-full wp-image-4370\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-04.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-04-300x195.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-04-150x97.jpg 150w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Inserite, poi, la spunta a \u201cCopy items into destination group\u2019s folder\u201d e cliccate su \u201cAdd\u201d.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-05.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 05\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-05\" width=\"414\" height=\"388\" class=\"aligncenter size-full wp-image-4371\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-05.jpg 414w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-05-300x281.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-05-150x140.jpg 150w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Se avete eseguito correttamente questa operazione troverete la classe \u201cReachability\u201d all\u2019interno del vostro progetto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-06.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-06.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 06\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-06\" width=\"306\" height=\"271\" class=\"aligncenter size-full wp-image-4372\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-06.jpg 306w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-06-300x265.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-06-150x132.jpg 150w\" sizes=\"auto, (max-width: 306px) 100vw, 306px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Dobbiamo infine inserire un framework in modo che la classe funzioni correttamente. Cliccate con il tasto destro su \u201cFrameworks\u201d e scegliete \u201cAdd -> Existing Frameworks\u2026\u201d. Dal men\u00f9 che vi apparir\u00e0 scegliete poi \u201cSystemConfiguration.framework\u201d:<\/p>\n<p>Cliccate infine su \u201cAdd\u201d per importare nel vostro progetto questo framework.<\/p>\n<h4>3. Scriviamo il codice che controlla le connessioni<\/h4>\n<p>Dobbiamo ora scrivere il codice che controlla le connessioni presenti. Apriamo il file \u201cControllaConnessioniViewController.h\u201d e modifichiamo cos\u00ec il codice gi\u00e0 presente:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n \r\n@class Reachability;\r\n \r\n@interface ControllaConnessioniViewController : UIViewController {\r\n IBOutlet UILabel *labelWifi;\r\n IBOutlet UILabel *label3g;\r\n \r\n Reachability* internetReach;\r\n Reachability* wifiReach;\r\n}\r\n \r\n-(IBAction)eseguiControllo;\r\n-(void)check:(Reachability*) curReach;\r\n \r\n@end\r\n<\/pre>\n<p>Vediamo le modifiche apportare. Alla riga 3 abbiamo definito l\u2019utilizzo della classe \u201cReachability\u201d, questa istruzione ci permette di evitare l\u2019importazione della classe, che poi faremo successivamente. Alle righe 9 e 10 abbiamo definito due oggetti, che avranno il compito di eseguire i test sulle connessioni. Abbiamo, infine, definito un nuovo metodo, \u201ccheck: curReach\u201d, che servir\u00e0 per il test delle connessioni.<\/p>\n<p>Possiamo salvare questo file e passare a \u201cControllaConnessioniViewController.m\u201d. Per prima cosa importiamo la libreria \u201cReachability\u201d, semplicemente inserendo questa importazione (riga 2):<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"ControllaConnessioniViewController.h\"\r\n#import \"Reachability.h\"\r\n \r\n@implementation ControllaConnessioniViewController\r\n<\/pre>\n<p>Ora dobbiamo scrivere il codice che controlla effettivamente le connessioni. Inserite, quindi, i seguenti due metodi (di cui abbiamo definito le intestazioni prima):<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n-(IBAction)eseguiControllo {\r\n internetReach = [[Reachability reachabilityForInternetConnection] retain];\r\n [self check:internetReach];\r\n \r\n wifiReach = [[Reachability reachabilityForLocalWiFi] retain];\r\n [self check:wifiReach];\r\n}\r\n \r\n-(void)check:(Reachability*) curReach{\r\n NetworkStatus netStatus = [curReach currentReachabilityStatus];\r\n \r\n switch (netStatus){\r\n case NotReachable:{\r\n label3g.text = @\"No\";\r\n labelWifi.text = @\"No\";\r\n break;\r\n }\r\n case ReachableViaWWAN:{\r\n label3g.text = @\"Si\";\r\n break;\r\n }\r\n case ReachableViaWiFi:{\r\n labelWifi.text = @\"Si\";\r\n break;\r\n }\r\n }\r\n}\r\n<\/pre>\n<p>Vediamo come funzionano i due metodi. \u201ceseguiControllo\u201d inizializza i due oggetti di tipo \u201cReachability\u201d (righe 2 e 5), che vengono, uno alla volta, passati al metodo \u201ccheck\u201d. Questo ne esamina lo stato: se \u00e8 disponibile la connessione in questione (quindi WiFi o 3G) entra nel caso della struttura switch predisposta (riga 12) e varia la label della connessione. Se invece non sono presenti le connessioni vengono settate entrambe le label a \u201cNo\u201d.<\/p>\n<p>Concludiamo implementando il metodo \u201cdealloc\u201d, che vi ricordo essere molto importante (soprattutto nelle applicazioni complesse):<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)dealloc {\r\n [wifiReach release];\r\n [internetReach release];\r\n [super dealloc];\r\n}\r\n<\/pre>\n<p>Possiamo testare la nostra applicazione cliccando su \u201cBuild and Run\u201d.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07.jpg\" alt=\"t070 verificare presenza connessione applicazioni iphone ipad 07\" title=\"t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07\" width=\"414\" height=\"770\" class=\"aligncenter size-full wp-image-4373\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07.jpg 414w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07-161x300.jpg 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t070-verificare-presenza-connessione-applicazioni-iphone-ipad-07-80x150.jpg 80w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/a><br \/>\n<\/center><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/ControllaConnessioni.zip\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\" alt=\"\" width=\"33\" height=\"40\" align=\"middle\" \/><\/a> Se avete problemi con il tutorial, <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/ControllaConnessioni.zip\">questo \u00e8 il nostro file di progetto.<\/a><\/p>\n<p><em>La guida \u00e8 stata creata da Andrea Busi per &#8220;devAPP&#8217;, prendendo spunto dall\u2019esempio&#8221;Reachability&#8221; di Apple.<br \/>\nI meriti, quindi, sono del legittimo autore e di Apple per l&#8217;esempio originale.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eccoci con un nuovo tutorial dedicato alla programmazione per iPhone SDK. In questo appuntamento vedremo come controllare&#8230;<\/p>\n","protected":false},"author":254,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[390,216,388,389],"class_list":["post-4365","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-3g-iphone","tag-andrea-busi","tag-reachability","tag-wifi-iphone"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/254"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=4365"}],"version-history":[{"count":11,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4365\/revisions"}],"predecessor-version":[{"id":4519,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4365\/revisions\/4519"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=4365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=4365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=4365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}