¿Cómo forzo una aplicación de iOS para usar 3G en lugar de Wi-Fi?

Quiero usar un protocolo de postría que funcione bien en 3G, pero no en algunos firewalls corporativos. ¿Cómo puede mi aplicación forzar el uso de la networking celular cuando falla la connection a través de WiFi incluso en el caso de que la networking Wi-Fi sea accesible?

EDIT: Después de leer la implementación de la class Reachability, no estoy seguro de si los dos son de hecho mutuamente excluyentes. Podría ser posible descubrir ambas interfaces a través de gethostbyname() , que podría intentar solo para ver qué sale.

Use getifaddrs para enumerar las interfaces de networking. Busque ifa_name que comience con "pdp". Esta será la interfaz celular (por ejemplo, pdp_ip0). Prueba (ifa_flags & IFF_UP) para asegurarte de que la interfaz está activa y obtén la dirección IP de ifa_addr. Luego usa bind () para vincular tu socket a esa dirección.

No estoy seguro de cómo activas la interfaz celular si aún no está activada. Normalmente, hago una llamada http de alto nivel para que iOS despierte la networking, pero no estoy seguro de bajo qué condiciones el service celular se activa cuando Wi-Fi también está disponible. Sospecho que generalmente está ahí como una reserva para el Wi-Fi.

http://iphonedevsdk.com/discussion/comment/120957

Por el aspecto de ese hilo, parece imposible. Su mejor opción puede ser intentar usar el protocolo y decir algo como "desconecte de Wi-Fi y vuelva a intentarlo" si no funciona.

Este hilo dice casi lo mismo:

¿Cómo iniciar de forma progtwigda la connection 3g en el iPhone?

Puede usar la class Reachability que Apple escribió para probar si la connection de networking está actualmente en 3G o WiFi, e incluso para comprobar si un recurso específico está disponible en la networking.