개요

Datadog Kotlin Multiplatform SDK에서 예기치 않은 동작이 발생하는 경우, 이 가이드로 문제를 신속하게 해결하세요. 계속해서 문제가 발생하면 Datadog 지원팀에 문의하여 추가 지원을 받으세요.

Datadog RUM이 초기화되었는지 확인

SDK가 올바르게 초기화되었는지 확인하려면 유틸리티 메서드 isInitialized를 사용하세요.

if (Datadog.isInitialized()) {
// 여기에 코드를 입력하세요.
}

디버깅

애플리케이션 작성 시 setVerbosity 메서드를 호출해 개발 로그를 활성화할 수 있습니다. 라이브러리의 모든 내부 메시지는 우선순위가 해당 레벨과 같거나 그보다 높은 경우 Android의 Logcat 또는 Xcode의 디버거 콘솔에 로깅됩니다.

Datadog.setVerbosity(SdkLogVerbosity.DEBUG)

추적 동의 설정(GDPR 준수)

GDPR 규정을 준수하기 위해 SDK는 초기화 시 추적 동의 값이 필요합니다. 추적 동의는 다음 값 중 하나일 수 있습니다.

  • TrackingConsent.PENDING: (기본값) SDK가 데이터 수집 및 일괄 처리를 시작하지만 해당 데이터를 데이터 수집 엔드포인트로 전송하지는 않습니다. SDK에서는 새 추적 동의 값으로 일괄 처리 데이터 작업이 결정될 때까지 대기합니다.
  • TrackingConsent.GRANTED: SDK가 데이터를 수집하고 데이터 수집 엔드포인트로 전송합니다.
  • TrackingConsent.NOT_GRANTED: SDK에서 데이터를 수집하지 않습니다. 로그, 트레이스를 수동으로 보낼 수 없습니다 전송할 수 없습니다.

SDK를 초기화한 후 추적 동의를 업데이트하려면 Datadog.setTrackingConsent(<NEW CONSENT>)를 호출합니다. SDK는 새 동의에 따라 동작을 변경합니다. 예를 들어, 현재 추적 동의가 TrackingConsent.PENDING이고 다음으로 업데이트하는 경우:

  • TrackingConsent.GRANTED: SDK에서 기존 일괄 처리된 전체 데이터와 향후 데이터를 데이터 수집 엔드포인트로 직접 전송합니다.
  • TrackingConsent.NOT_GRANTED: SDK에서 일괄 처리된 데이터 전체를 삭제하고 이후 데이터를 수집하지 않습니다.

일반적인 문제

iOS 바이너리 연결

누락된 PLCrashReporter 기호

다음과 같이 링커 검색 경로에 PLCrashReporter 기호가 누락되어 연결 단계 중 오류가 발생하는 경우

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_PLCrashReport", referenced from:
       in DatadogCrashReporting[arm64][15](PLCrashReporterIntegration.o)
  "_OBJC_CLASS_$_PLCrashReportBinaryImageInfo", referenced from:
       in DatadogCrashReporting[arm64][7](CrashReport.o)
  "_OBJC_CLASS_$_PLCrashReportStackFrameInfo", referenced from:
       in DatadogCrashReporting[arm64][7](CrashReport.o)
  "_OBJC_CLASS_$_PLCrashReportThreadInfo", referenced from:
       in DatadogCrashReporting[arm64][7](CrashReport.o)
  "_OBJC_CLASS_$_PLCrashReporter", referenced from:
       in DatadogCrashReporting[arm64][15](PLCrashReporterIntegration.o)
  "_OBJC_CLASS_$_PLCrashReporterConfig", referenced from:
       in DatadogCrashReporting[arm64][15](PLCrashReporterIntegration.o)

그런 다음 CrashReporter 프레임워크 이름을 링커에 명시적으로 전달해야 합니다.

targets.withType(KotlinNativeTarget::class.java) {
   compilations.getByName("main").compileTaskProvider {
       compilerOptions {
           freeCompilerArgs.addAll(
               listOf(
                  "-linker-option",
                  "-framework CrashReporter"
               )
           )
       }
   }
}

누락된 swiftCompatibility 기호

다음과 같이 링커 검색 경로에 swiftCompatibility 기호가 누락되어 연결 단계 중 오류가 발생하는 경우

Undefined symbols for architecture arm64:
  "__swift_FORCE_LOAD_$_swiftCompatibility56", referenced from:
      __swift_FORCE_LOAD_$_swiftCompatibility56_$_DatadogCrashReporting in DatadogCrashReporting[arm64][4](BacktraceReporter.o)
  "__swift_FORCE_LOAD_$_swiftCompatibilityConcurrency", referenced from:
      __swift_FORCE_LOAD_$_swiftCompatibilityConcurrency_$_DatadogCrashReporting in DatadogCrashReporting[arm64][4](BacktraceReporter.o)

그런 다음 이 오류를 억제할 수 있습니다.

targets.withType(KotlinNativeTarget::class.java) {
   compilations.getByName("main").compileTaskProvider {
       compilerOptions {
           freeCompilerArgs.addAll(
               listOf(
                  "-linker-option",
                  "-U __swift_FORCE_LOAD_\$_swiftCompatibility56",
                  "-linker-option",
                  "-U __swift_FORCE_LOAD_\$_swiftCompatibilityConcurrency"
               )
           )
       }
   }
}

참고 자료