DevTutorial #6 – SearchIP
| 15-10-2008
Categorie: DevTutorial, iPhone SDK
3
Eccoci con il sesto tutorial dedicati alla programmazione per iPhone/iPod Touch! Purtroppo in queste settimane non siamo riusciti a pubblicare i tutorial con la solita puntualità, vedremo di rifarci nelle prossime settimane.
Vi proponiamo oggi un piccolo tutorial, in cui creeremo un’applicazione per rilevare l’indirizzo IP del proprio iPhone/iPod Touch.
1. Creiamo un nuovo progetto
Aprimo Xcode, selezioniamo “File -> New Project”. Nel menù che ci appare selezioniamo “Window-based Application”, clicchiamo su “Choose…” e immettiamo come nome “SearchIP” e fate clic su “Save”. Abbiamo così creato il nostro nuovo progetto.
2. Creare l’interfaccia grafica dell’applicazione
Dopo aver creato il nostro progetto, facciamo doppio click sul file “MainWindow.xib”, si aprirà così l’Interface Builder, con cui ormai abbiamo già preso conoscenza. Dalla libreria (”Tools -> Library”) selezioniamo un componente di tipo “View” e trasciniamolo nella nostra applicazione. Andiamo poi in “Identity Inspector” e in Class scriviamo “MainView”.

Abbiamo creato la vista principale della nostra applicazione che, se vogliamo, possiamo personalizzare a nostro piacere (ad esempio impostando un colore di sfondo diverso dal classico bianco).
Dalla libreria prendiamo un componente “Label” e trasciniamolo nella nostra vista. Cambiamo il testo e scriviamo “Indirizzo IP:”. Prendiamo un’altra label e trasciniamola ancora all’interno della vista, questa volta cancellando il testo al suo interno. Avremo un risultato come questo:
3. Creiamo le classi necessarie
Fino ad ora ci siamo occupati puramente degli aspetti grafici della nostra applicazione. Vediamo ora di aggiungere i controlli che ci serviranno.
Restiamo sempre nell’Interface Builder, e assicuriamoci di aver selezionato la vista principale. Andiamo nell’Identity Inspector, e controlliamo che in “Class” vi sia selezionata “MainView” che abbiamo scritto in precedenza. Aggiungiamo l’unico componente che ci occorre, nel seguente modo:
Ora dobbiamo collegare questo oggetto con la label che abbiamo creato in precedenza. Entriamo nel pannello “Connections” (Connections Inspector). Prendiamo il pallino a fianco di “labelIP” e trasciniamolo nella label vuota dell’applicazione, quella a fianco di “Indirizzo IP”. Avremo quindi il pannello che mostrerà le seguenti proprietà:
Ora non ci resta che salvare le proprietà che abbiamo appena impostato in un file di classe. Andiamo nel menù “File -> Write Class Files…” e salviamo la classe “MainView” nella cartella Classes del nostro progetto.
Clicchiamo su “Save” e nella schermata successiva selezioniamo il nostro progetto prima di cliccare su “Add”.
Possiamo ora chiudere l’Interface Builder cliccando su “Save” nell’avviso che ci comparirà.
4. Aggiungiamo il codice necessario
Ora passiamo alla scrittura del codice in Xcode. Iniziamo spostando i due file (”MainView.m” e “MainView.h”) all’interno della cartella “Classes”:
Apriamo il file “MainView.h” e modifichiamo il codice nel seguente modo:
Non abbiamo fatto altro che aggiungere “UIView” nelll’intestazione.
Ora apriamo il file “MainView.m” e aggiungiamo il seguente metodo:
In questo semplice metodo cosa facciamo? Istanziamo un oggetto di tipo NSHost, poi eseguiamo un controllo: se l’oggetto è stato creato correttamente vuol dire che è attiva una connessione, quindi ritorniamo il valore dell’indirizzo IP, altrimenti (in caso negativo) ritorniamo l’indirizzo di loopback (quello che è di default in ogni dispositivo).
Ora dobbiamo solo creare il metodo “awakeFromNib”, che verrà richiamato quando viene caricata l’applicazione. Modifichiamo il metodo nel seguente modo:
Abbiamo già completato la nostra applicazione!
NOTA IMPORTANTE: purtroppo se provate a cliccare su “Build and Go” e ad eseguire questa applicazione nel simulatore questa crasherà! Per eseguirla correttamente dovrete quindi trasferirla nel vostro iPhone/iPod, signarla e poi sarà funzionante. Potete fare tutto ciò semplicemente seguendo la nostra guida a riguardo.
Se Avete Problemi, questo è il file di progetto.
La guida è stata realizzata da Andrea Busi per “Bubi Devs” e “iSpazio“. Tutti i diritti sono del legittimo autore.
461 visite














Ciao,
). Ho provato con diverse soluzioni ma la più gettonata è quella che prevede l’uso di SCNetworkReachabilityCreateWithName … Solo che a me da sempre disponibile… tu hai un suggerimento/esempio da darmi? Riepilogando: mi servirebbe una funzione che dato un IP address mi dice se è raggiungibile (con timeout…)
per prima cosa complimenti per il blog e per tutto il tuo lavoro: io ho un problema che non riesco a risolvere e che riguarda il check della disponibilità di un IP address: in sostanza ho bisogno di fa un ping su un IP address dato da utente per poi stabilire una connessione a socket (la connessione a socket è già testata e funzionante
Grazie
@nebula_1979: ciao! sinceramente non ho niente che possa fare al caso tuo.. Nella documentazione di Apple non hai trovato niente?
grazie ugualmente… alla fine ho scoperto questo:
impostando il timeout nella socket option in modo opportuno, l’iPhone simulator non gestisce correttamente il timeout del socket (scade sempre dopo 95 secondi circa), mentre l’iPhone reale si. Inoltre nel header del simulatore manca il define del codice di timeout…
Alla fine questa è la soluzione (da chiamare prima della connessione al sockect).
//iPhone simulator actually does not handle tcp connection timeout
#if TARGET_IPHONE_SIMULATOR
#define TCP_CONNECTIONTIMEOUT 0×20 /* connection timeout */
#endif
// Set timeout value to stop hanging
struct timeval timeout;
timeout.tv_sec = timeout_ms / 1000;
timeout.tv_usec = timeout_ms % 1000;
setsockopt(socketfd, IPPROTO_TCP, TCP_CONNECTIONTIMEOUT, &timeout, sizeof(timeout));