iOS: falla la primera request de networking después de desbloquear

Tengo una aplicación de iOS que extrae datos de usuario del server en applicationDidBecomeActive .

Si el usuario presiona el button de inicio, luego regresa a la aplicación, ya sea a través del icono de la aplicación o de la pantalla multitarea, la function funciona bien.

Si el usuario bloquea el dispositivo por el momento (mientras aún está en la aplicación o presiona en su casa, luego bloquea), la request de networking falla. Estoy usando Alamofire. El object de respuesta es nil y el result.data está vacío. No hay ninguna request registrada en el server tampoco. La falla ocurre al instante.

Apple Tech Note TN2277 , dice que el kernel puede recuperar sockets fuera de las aplicaciones sin que tengan ninguna idea de lo que sucede. Aquí está la parte relevante:

Prueba de recuperación de zócalo

Si va a escribir código que maneja los resources de un socket que el kernel reclama, debe averiguar cómo probarlo. Las circunstancias exactas bajo las cuales el sistema podría reclamar los resources de un socket no están documentadas a propósito; Esto nos da la flexibilidad para mejorar las cosas en el futuro. Sin embargo, en los sistemas actuales (iOS 4.0 a iOS 4.3), puede get el sistema para reclamar resources de los sockets en su aplicación mediante:

  1. poniendo tu aplicación en segundo plano
  2. asegurando que la aplicación se suspenda
  3. bloquear la pantalla

Cuando la aplicación reanude la ejecución, descubrirá que se han recuperado los zócalos.

Para solucionarlo, intente crear un nuevo Alamofire.Manager cada vez que se llame a la request de AppDelegate WillEnterForeground. Espero que esto te ayude …