概要

Datadog RUM で予期せぬ動作が発生した場合、このガイドを使用して問題を迅速に解決してください。問題が解決しない場合は、Datadog サポートにお問い合わせください。

Datadog SDK が適切に初期化されているかどうか確認

Datadog SDKを構成し、アプリを初回実行した後、Xcode のデバッガコンソールを確認します。SDK はいくつかの一貫性チェックを実装しており、構成ミスがある場合は関連する警告を出力します。

デバッグ

アプリケーションの作成時に、verbosityLevel 値を設定することで開発ログを有効にすることができます。設定したレベルと同等以上の優先度を持つ SDK からの関連メッセージが、Xcode のデバッガコンソールに出力されます。

Datadog.verbosityLevel = .debug

その後、RUM データのバッチが正しくアップロードされたことを示す以下のような出力が表示されます。

[DATADOG SDK] 🐶  17:23:09.849 [DEBUG]  (rum) Uploading batch...
[DATADOG SDK] 🐶  17:23:10.972 [DEBUG]     (rum) accepted, won't be retransmitted: success

推奨: DEBUG ビルド構成では Datadog.verbosityLevel を使用し、RELEASE では設定を解除してください。 

独自のセッションデリゲートで DDURLSessionDelegate を使用する

DDURLSessionDelegate を使ってネットワークリクエストを自動的に追跡したい場合でも、アプリがすでに独自のセッションデリゲートを実装しているなら、inheritance または composition のいずれかのパターンを用いて DDURLSessionDelegate に呼び出しを転送できます。

inheritance パターンを使用する場合は、カスタムデリゲートのベースクラスとして DDURLSessionDelegate を使用し、オーバーライドしたメソッドから super の実装を必ず呼び出してください。例:

class YourCustomDelegateURLSessionDelegate: DDURLSessionDelegate {
    override func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        super.urlSession(session, task: task, didCompleteWithError: error) // Datadog デリゲートに転送する
        /* カスタムロジック */
    }
}

composition パターンを使用する場合は、Datadog の __URLSessionDelegateProviding プロトコルを利用して DDURLSessionDelegate の内部インスタンスを保持し、ddURLSessionDelegate に呼び出しを転送します。例:

private class YourCustomDelegateURLSessionDelegate: NSObject, URLSessionTaskDelegate, URLSessionDataDelegate, __URLSessionDelegateProviding {
    // MARK: - __URLSessionDelegateProviding conformance

    let ddURLSessionDelegate = DDURLSessionDelegate()

    // MARK: - __URLSessionDelegateProviding handling

    func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {
        d dURLSessionDelegate.urlSession(session, task: task, didFinishCollecting: metrics) // Datadog デリゲートに転送する
        /* カスタムロジック */
    }

    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        ddURLSessionDelegate.urlSession(session, task: task, didCompleteWithError: error) // Datadog デリゲートに転送する
        /* カスタムロジック */
    }

    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        ddURLSessionDelegate.urlSession(session, dataTask: dataTask, didReceive: data) // Datadog デリゲートに転送する
        /* カスタムロジック */
    }
}

: composition を使用する場合、ddURLSessionDelegate__URLSessionDelegateProviding のコメント に記載された必要なすべての呼び出しを受け取る必要があります。デリゲートは次を実装する必要があります:

“Deobfuscation failed” warning

スタックトレースの難読化解除に失敗した場合、警告が表示されることがあります。スタックトレースがもともと難読化されていない場合は、この警告は無視してかまいません。そうでない場合は、RUM Debug Symbols ページでアップロード済みの dSYM ファイルをすべて確認してください。RUM Debug Symbols を用いた難読化スタックトレースの調査も併せてご覧ください。

その他の参考資料