Desarrollador iOS: pregunta de entrevista
¿Cómo diseñas networking en iOS?
Diseña networking iOS con URLSession, modelos tipados, cancelación, timeouts, errores mapeados, credenciales seguras, reintentos para fallos transitorios seguros y estado de carga observable.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
La capa de red envuelve URLSession detrás de un protocolo pequeño para que las funcionalidades dependan de una interfaz y las pruebas inyecten un doble. Las solicitudes se construyen desde endpoints tipados que codifican ruta, método, query y cuerpo; las respuestas se decodifican a modelos Codable con estrategias explícitas de fechas y claves. Los errores se convierten en un único enum que distingue fallos de transporte, rangos de estado HTTP y problemas de decodificación, para que la interfaz decida entre reintento y mensaje. async/await con cancelación de Task detiene una solicitud cuando su pantalla desaparece, los reintentos solo aplican a solicitudes idempotentes con backoff, y los tokens viven en el Keychain y se refrescan mediante una única tarea en vuelo.
Ejemplo
Un ProductsClient expone func products(page: Int) async throws -> [Product] sobre un protocolo HTTPClient inyectado; la vista SwiftUI lo llama dentro de .task para que salir de la pantalla cancele la carga. Cuando el token de acceso caduca, el cliente espera una tarea de refresco compartida y reintenta una vez la solicitud original, y un 401 tras el refresco cierra la sesión.
Errores frecuentes
- Usar una llamada directa al singleton de URLSession en las vistas y hacerlas imposibles de probar.
- Reintentar un POST fallido que quizá ya creó el recurso.
- Guardar el token de autenticación en UserDefaults en lugar del Keychain.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.