NSNetService / Bonjour discovery solo funciona en el simulador de iPhone

Estoy trabajando en una aplicación para iPhone que requiere un model básico de interacción cliente / server. Para esto, voy a utilizar Bonjour y NSNetService, junto con NSNetServiceBrowser para descubrir otros en la misma networking. He seguido varias guías diferentes que tienen más o less el mismo código de muestra.

Código de Servidor Relevante

... serverName = [[UIDevice currentDevice] name]; netService = [[NSNetService alloc] initWithDomain:@"local." type:@"_myservice._tcp." name:serverName port:port]; ... 

El service se publica con éxito, es decir, obtengo netServiceDidPublish: callback

Código del browser relevante

 ... browser = [[NSNetServiceBrowser alloc] init]; [browser setDelegate:delegate]; [browser searchForServicesOfType:@"_myservice._tcp." inDomain:@"local."]; ... 

Ahora el resultado de todo esto es interesante:

  1. Al ejecutarse en un iPhone, el dispositivo solo puede ver su propio NSNetService publicado.
  2. Al ejecutarse en 2 iPhones, ninguno de los dispositivos puede ver el otro NSNetService.
  3. Al ejecutarse en el iPhone Simulator, encontrará todos los NSNetServices, incluido el suyo propio.

Captura de pantalla del iPhone Simulator

introduzca la descripción de la imagen aquí

Estoy un poco perdido aquí … El simulador funciona exactamente como se esperaba. Sin embargo, en el dispositivo no lo es, no puedo get 2 iPhones diferentes en el mismo WiFi para verlos, solo se ven a sí mismos. ¿Alguna idea de lo que está pasando aquí?

Resulta que el enrutador en el que estoy conectado tenía un "SPI Firewall" activado de forma pnetworkingeterminada. Al desactivarlo, se resolvió el problema.

Una cosa de la que sigo sintiendo curiosidad es: ¿cómo es posible que las requestes provenientes de mi Mac, tanto el iPhone Simulator como un browser Bonjour, hayan podido pasar por este cortafuegos, pero no fueron 3 iPhones diferentes?