Nella documentazione Apple non ci sono delle API specifiche per ottenere l’indirizzo IP dell’iPhone o iPodTouch, ma cercando su Google si può trovare un metodo, un po’ scorretto, ma funzionante. L’autore usa la classe NSHost per ricavarne gli indirizzi, ma questa, come da documentazione, può essere usata teoricamente solo per le applicazioni Mac e non per iPhone.

Indispettito da ciò ho cercato un metodo più “legale”: ho usato funzioni di più basso livello che sono incluse nelle librerie <netdb.h> e <arpa/inet.h>.

In queste librerie la funzione “chiave” è “gethostbyname(const char *name)” che restituisce una struttura contente tutte le informazioni della nostra macchina. Per trovare il nome del nostro host basti guardare nella documentazione che, sotto la classe NSProcessInfo, riporta un metodo per ottenere il nome dell’host appunto. Il nome, però, non è completo: manca della parte finale “.local” che informa della sua appartenenza alla rete locale.

Di seguito il codice 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];
 
}