Solucionar problemas con el SDK de iOS
Si experimentas un comportamiento inesperado con Datadog RUM, utiliza esta guía para solucionar los problemas rápidamente. Si sigues teniendo problemas, ponte en contacto con el Equipo de soporte técnico de Datadog para obtener más ayuda.
Haz un check si el SDK de Datadog está correctamente inicializado
Después de configurar el SDK de Datadog y ejecutar la aplicación por primera vez, haz un check de tu consola de depuración en Xcode. El SDK implementa varios checks de la coherencia y emite las advertencias pertinentes si algo está mal configurado.
Depuración
Al escribir tu aplicación, puedes activar los logs de desarrollo configurando el valor verbosityLevel
. Los mensajes pertinentes del SDK con una prioridad igual o superior al nivel proporcionado se emiten en la consola del depurador en Xcode:
Datadog.verbosityLevel = .debug
Entonces deberías ver una salida similar a la siguiente, lo cual indica que un lote de datos de RUM se ha cargado correctamente:
[DATADOG SDK] 🐶 → 17:23:09.849 [DEBUG] ⏳ (rum) Cargando lote...
[DATADOG SDK] 🐶 → 17:23:10.972 [DEBUG] → (rum) aceptado, no se retransmitirá: éxito
Recomendación: Utiliza Datadog.verbosityLevel
en la configuración DEBUG
y desactívala en RELEASE
.
Utilización de DDURLSessionDelegate
con tu propio delegado de sesión
Si deseas realizar un rastreo automático de las solicitudes de red con DDURLSessionDelegate
, pero tu aplicación ya implementa su propio delegado de sesión, puedes utilizar los patrones inheritance o composition y reenviar las llamadas a DDURLSessionDelegate
.
Cuando utilices un patrón de inheritance, utiliza DDURLSessionDelegate
como clase base para tu delegado personalizado y asegúrate de llamar a la implementación de super
desde tus métodos sustituidos. Por ejemplo:
clase YourCustomDelegateURLSessionDelegate: DDURLSessionDelegate {
sustituir func urlSession(_ sesión: URLSession, tarea: URLSessionTask, didCompleteWithError error: ¿Error?) {
super.urlSession(session, tarea: tarea, didCompleteWithError: error) // reenviar al delegado de Datadog
/* tu lógica personalizada */
}
}
Cuando utilices un patrón de composition, aprovecha el protocolo __URLSessionDelegateProviding
de Datadog para mantener una instancia interna de DDURLSessionDelegate
y reenviar las llamadas a ddURLSessionDelegate
. Por ejemplo:
clase privada YourCustomDelegateURLSessionDelegate: NSObject, URLSessionTaskDelegate, URLSessionDataDelegate, __URLSessionDelegateProviding {
// MARCA: - __URLSessionDelegateProviding conformidad
supongamos que ddURLSessionDelegate = DDURLSessionDelegate()
// MARCA: - __URLSessionDelegateProviding manipulación
func urlSession(_ sesión: URLSession, tarea: URLSessionTask, didFinishCollecting métricas: URLSessionTaskMetrics) {
ddURLSessionDelegate.urlSession(session, tarea: tarea, didFinishCollecting: métricas) // reenviar al delegado de Datadog
/* tu lógica personalizada */
}
func urlSession(_ session: URLSession, tarea: URLSessionTask, didCompleteWithError error: ¿Error?) {
ddURLSessionDelegate.urlSession(session, tarea: tarea, didCompleteWithError: error) // reenviar al delegado de Datadog
/* tu lógica personalizada */
}
func urlSession(_ sesión: URLSession, dataTask: URLSessionDataTask, didReceive datos: Datos) {
ddURLSessionDelegate.urlSession(session, dataTask: dataTask, didReceive: datos) // reenviar al delegado de Datadog
/* tu lógica personalizada */
}
}
Nota: Si utilizas composition, ddURLSessionDelegate
debes recibir todas las llamadas necesarias enumeradas en comentarios del protocolo de __URLSessionDelegateProviding
. Tu delegado necesita:
- implementar
URLSessionTaskDelegate
y reenviar: - implementar
URLSessionDataDelegate
y reenviar:
Referencias adicionales
Más enlaces, artículos y documentación útiles: