I'm using Bonjour with an NSNetService to publish a server from my iPhone. It all works as expected, I can browse the pages I'm serving etc. However, on the iPhone I want to display the host name (i.e. the URL, like "myDevice.local."), so that one can also enter the address manually in a browser (useful for clients missing a bonjour discovery service). My understanding is that calling the method [myNetService hostName] should give me that address. However, this call always returns nil. I read on some forum that I first should resolve the service, however both [myNetService resolve] and [myNetService resolveWithTimeout:10] call the delegate method
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict;
with the error
{
NSNetServicesErrorCode = -72003;
NSNetServicesErrorDomain = 10;
}
which apparently means that it is already resolved. Again, all this is happening while i can use the service. Also I can get the port, the domain, and the type of the service. The only other strange thing is that the call [myNetService addresses] returns an empty array.
I'm using SDK 3.1.3. Does anybody have an idea what I could be doing wrong?
The
[[NSProcessInfo processInfo] hostName]
method was not useful for me for two reasons:The following code from http://iphoneappcode.blogspot.com/2012/05/how-to-get-device-ipaddess-in-iphone.html worked best for me, always returning the local host name with sensitive case:
Check this link out:
This says your error it was still trying to resolve the service:
https://developer.apple.com/library/IOs/documentation/Cocoa/Reference/Foundation/Classes/NSNetService_Class/index.html#//apple_ref/c/tdef/NSNetServicesError
You can get the hostname via [[NSProcessInfo processInfo] hostName] without resolving the netservice you just published.