[i][code]Cercando su Google un metodo per ottenere l'indirizzo IP del nostro dispositivo (iPhone o iPod Touch) l'unico metodo trovato è un metodo, come dire, è più un trucchetto che un metodo vero e proprio, infatti l'autore usa la classe NSHost per ricavarne gli indirizzi, ma codesta classe, sbirciando nella documentazione Apple, può essere usata teoricamente solo per le applicazioni Mac e non per l'iPhone.
Indispettito da ciò ho cercato un metodo più "legale" ed eccone il risultato di seguito.
Ho usato funzioni di più basso livello e in questo tutorial tralascerò le questioni riguardanti l'interfaccia e i collegamenti tra oggetti, vi riporterò solo il codice del metodo, commentato, per ottenere l'ip.
Trovai questa bella funzione "gethostbyname()" che mi restituiva l'host e tutte le sue informazioni.. dissi "bene è fatta!" ma come dice lo stesso nome della funzione serve il nome dell'host.
Nella documentazione Apple ho trovato un modo per ottenerlo: usando la classe UIDevice esiste un metodo che mi restituisce il nome dell'host, ma questo non è completo, manca della parte ".local" finale che ne determina penso l'appartenenza ad una rete locale.
Di seguito il sorgente del metodo:
-(NSString *)ottieniIP {
/* dichiaro le variabili che mi rerviranno */
struct hostent *myHost;
struct in_addr **addr_list;
char *mioIP;
/* ottengo il nome dell'host ovvero del dispositivo in rete */
NSString *nomeHost = [[NSProcessInfo processInfo] hostName];
/* aggiungo ".local" poichè indica la rete locale */
nomeHost = [nomeHost stringByAppendingFormat:@".local" ];
/* ottengo l'host */
myHost = gethostbyname([nomeHost cStringUsingEncoding:1]);
/* ricavo tutti gli indirizzi dell'host */
addr_list = (struct in_addr **)myHost->h_addr_list;
for(int i = 0; addr_list[i] != NULL; i++) {
printf("%s \n", inet_ntoa(*addr_list[i]));
mioIP = inet_ntoa(*addr_list[i]);
}
/* restituisco l'ultimo indirizzo trovato */
return [NSString stringWithCString:mioIP encoding:1];
}
Non penso ci sia molto da spiegare.
QUI il link al mio progetto e i commenti per eventuali chiarimenti.
Dimenticavo di dire che l'applicazione può essere testata solamente su un iPhone o iPod Touch e non col simulatore. La cosa credo dipenda dal fatto che la classe "UIDevice" non lavora correttamente sul simulatore.
Non vorrei sbagliare, ma nel mio progetto è già compilata l'applicazione che può essere installata sul dispositivo (anche non jailbreak), non garantisco, provate e fatemi sapere.