Información general

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 DEBUGy 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:

Referencias adicionales