概要

このページでは、iOS SDK を使用して、リアル ユーザー モニタリング (RUM)Error Tracking の両方に向けてアプリケーションをインスツルメント化する方法を説明します。RUM (Error Tracking を含む) または単体製品として Error Tracking を購入している場合は、以下の手順に従ってアプリケーションをインスツルメント化できます。

セットアップ

  1. SDK を依存関係として宣言します。
  2. UI でアプリケーションの詳細を指定します。
  3. ライブラリを初期化します。
  4. データの送信を開始するには、Datadog Monitor を初期化し、URLSessionInstrumentation を有効にします。

SDK を依存関係として宣言

Declare the library as a dependency depending on your package manager. Swift Package Manager (SPM) is recommended.

Apple の Swift Package Manager を使用して統合するには、Package.swift に以下を依存関係として追加します。

.package(url: "https://github.com/Datadog/dd-sdk-ios.git", .upToNextMajor(from: "2.0.0"))

プロジェクトで、以下のライブラリをリンクします。

DatadogCore
DatadogRUM

CocoaPods を使用して、dd-sdk-ios をインストールできます。

pod 'DatadogCore'
pod 'DatadogRUM'

Carthage を使用して、dd-sdk-ios をインストールできます。

github "DataDog/dd-sdk-ios"

Xcode で、以下のフレームワークをリンクします。

DatadogInternal.xcframework
DatadogCore.xcframework
DatadogRUM.xcframework

UI でアプリケーションの詳細を指定

  1. Digital Experience > Add an Application に移動します。

  2. アプリケーションタイプとして iOS を選択し、新しいアプリケーション名を入力して一意の Datadog アプリケーション ID とクライアントトークンを生成します。

  3. Web ビューをインスツルメントするには、Instrument your webviews トグルをクリックします。詳しくは、Web ビュー追跡を参照してください。

  4. クライアント IP やジオロケーション データに関する自動ユーザー データ収集を無効にするには、該当する設定のトグルを使用します。詳細は RUM iOS で収集されるデータ を参照してください。

    Datadog で iOS 用 RUM アプリケーションを作成する
  1. Error Tracking > Settings > Browser and Mobile > Add an Application に移動します。

  2. アプリケーションタイプとして iOS を選択し、新しいアプリケーション名を入力して一意の Datadog アプリケーション ID とクライアントトークンを生成します。

  3. Web ビューをインスツルメントするには、Instrument your webviews トグルをクリックします。詳しくは、Web ビュー追跡を参照してください。

  4. クライアント IP やジオロケーション データに関する自動ユーザー データ収集を無効にするには、該当する設定のトグルを使用します。詳細は iOS で収集されるデータ を参照してください。

    Datadog で iOS 用アプリケーションを作成

データの安全性を確保するために、クライアント トークンを必ず使用してください。dd-sdk-ios ライブラリの構成に Datadog API キー のみを使用した場合、iOS アプリケーションのバイト コード内でクライアント サイドに露出します。

クライアント トークンの設定についての詳細は、クライアント トークンのドキュメント を参照してください。

ライブラリの初期化

初期化スニペットでは、環境名、サービス名、バージョン番号を設定します。以下の例では、app-name はデータを生成するアプリケーションのバリアントを指定します。

詳細は タグの使用 を参照してください。

import DatadogCore

Datadog.initialize(
  with: Datadog.Configuration(
    clientToken: "<client token>",
    env: "<environment>",
    service: "<service name>"
  ),
  trackingConsent: trackingConsent
)
@import DatadogObjc;

DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";

[DDDatadog initializeWithConfiguration:configuration
                       trackingConsent:trackingConsent];

import DatadogCore

Datadog.initialize(
  with: Datadog.Configuration(
    clientToken: "<client token>",
    env: "<environment>",
    site: .eu1,
    service: "<service name>"
  ),
  trackingConsent: trackingConsent
)
@import DatadogObjc;

DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite eu1];

[DDDatadog initializeWithConfiguration:configuration
                       trackingConsent:trackingConsent];

import DatadogCore

Datadog.initialize(
  with: Datadog.Configuration(
    clientToken: "<client token>",
    env: "<environment>",
    site: .us3,
    service: "<service name>"
  ),
  trackingConsent: trackingConsent
)
@import DatadogObjc;

DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite us3];

[DDDatadog initializeWithConfiguration:configuration
                       trackingConsent:trackingConsent];

import DatadogCore

Datadog.initialize(
  with: Datadog.Configuration(
    clientToken: "<client token>",
    env: "<environment>",
    site: .us5,
    service: "<service name>"
  ),
  trackingConsent: trackingConsent
)
@import DatadogObjc;

DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite us5];

[DDDatadog initializeWithConfiguration:configuration
                       trackingConsent:trackingConsent];

import DatadogCore

Datadog.initialize(
  with: Datadog.Configuration(
    clientToken: "<client token>",
    env: "<environment>",
    site: .us1_fed,
    service: "<service name>"
  ),
  trackingConsent: trackingConsent
)
@import DatadogObjc;

DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite us1_fed];

[DDDatadog initializeWithConfiguration:configuration
                       trackingConsent:trackingConsent];

import DatadogCore

Datadog.initialize(
  with: Datadog.Configuration(
    clientToken: "<client token>",
    env: "<environment>",
    site: .ap1,
    service: "<service name>"
  ),
  trackingConsent: trackingConsent
)
@import DatadogObjc;

DDConfiguration *configuration = [[DDConfiguration alloc] initWithClientToken:@"<client token>" env:@"<environment>"];
configuration.service = @"<service name>";
configuration.site = [DDSite ap1];

[DDDatadog initializeWithConfiguration:configuration
                       trackingConsent:trackingConsent];

iOS SDK は、SDK の初期化時に指定したオプションに応じてユーザー セッションを自動的にトラッキングします。EU ユーザー向けの GDPR 準拠やその他の 初期化パラメーター を SDK 構成に追加するには、トラッキング同意の設定に関するドキュメント を参照してください。

RUM セッションのサンプリング

セッションのサンプルレートの設定はError Tracking には適用されません。

アプリケーションが Datadog RUM に送信するデータを制御するには、RUM iOS SDK の初期化 時に RUM セッションのサンプリング レートを指定できます。レートは 0 から 100 の間のパーセンテージです。既定では、sessionSamplingRate は 100 (すべてのセッションを保持) に設定されています。

たとえば、セッションの使用の 50% のみを維持するには、

let configuration = RUM.Configuration(
    applicationID: "<rum application id>",
    sessionSampleRate: 50
)
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<rum application id>"];
configuration.sessionSampleRate = 50;

トラッキングの同意を設定 (GDPR の遵守)

GDPR 規制を遵守するため、RUM iOS SDK は初期化時に追跡に関する同意を求めます。

trackingConsent 設定は以下のいずれかの値で示されます。

  1. .pending: RUM iOS SDK はデータの収集とバッチ処理を開始しますが、Datadog へは送信しません。RUM iOS SDK はバッチ処理が完了したデータをどうするかについての新たな同意値が得られるまで待機します。
  2. .granted: RUM iOS SDK はデータの収集を開始し、Datadog へ送信します。
  3. .notGranted: RUM iOS SDK は一切のデータを収集しません。Datadog にはログ、トレース、イベントは送信されません。

RUM iOS SDK の初期化後に追跡同意値を変更するには、Datadog.set(trackingConsent:) API 呼び出しを使用します。RUM iOS SDK は、新しい値に応じて動作を変更します。

たとえば、現在の追跡同意が .pending の場合:

  • 値を .granted に変更すると、RUM iOS SDK は現在および今後のすべてのデータを Datadog に送信します。
  • 値を .notGranted に変更すると、RUM iOS SDK は現在のすべてのデータを消去し、今後のデータを収集しません。

Datadog Monitor を初期化し、URLSessionInstrumentation を有効にする

Datadog Monitor を構成して登録します。これは 1 回だけ、通常は AppDelegate のコード内で実行します:

import DatadogRUM

RUM.enable(
  with: RUM.Configuration(
    applicationID: "<rum application id>",
    uiKitViewsPredicate: DefaultUIKitRUMViewsPredicate(),
    uiKitActionsPredicate: DefaultUIKitRUMActionsPredicate(),
    urlSessionTracking: RUM.Configuration.URLSessionTracking()
  )
)
@import DatadogObjc;

DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<rum application id>"];
configuration.uiKitViewsPredicate = [DDDefaultUIKitRUMViewsPredicate new];
configuration.uiKitActionsPredicate = [DDDefaultUIKitRUMActionsPredicate new];
[configuration setURLSessionTracking:[DDRUMURLSessionTracking new]];

[DDRUM enableWith:configuration];

URLSession インスタンスから送信されるリクエストをリソースとして監視するには、デリゲート タイプに対して URLSessionInstrumentation を有効にし、URLSession にデリゲート インスタンスを渡します:

URLSessionInstrumentation.enable(
    with: .init(
        delegateClass: <YourSessionDelegate>.self
    )
)

let session = URLSession(
    configuration: .default,
    delegate: <YourSessionDelegate>(),
    delegateQueue: nil
)
DDURLSessionInstrumentationConfiguration *config = [[DDURLSessionInstrumentationConfiguration alloc] initWithDelegateClass:[<YourSessionDelegate> class]];
[DDURLSessionInstrumentation enableWithConfiguration:config];

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                                                      delegate:[[<YourSessionDelegate> alloc] init]
                                                 delegateQueue:nil];

ビューをインスツルメントする

Datadog iOS SDK は、SwiftUI アプリケーションのビューをインスツルメント化できます。このインスツルメント化は、UIKitSwiftUI のハイブリッド アプリケーションでも機能します。

SwiftUI.View をインスツルメントするためには、以下のメソッドをビュー宣言に追加します。

import SwiftUI
import DatadogRUM

struct FooView: View {

    var body: some View {
        FooContent {
            ...
        }
        .trackRUMView(name: "Foo")
    }
}

trackRUMView(name:) メソッドは、SwiftUI のビューが画面に表示される時と消える時にビューを開始および停止します。

タップアクションをインスツルメントする

Datadog iOS SDK は、SwiftUI アプリケーションのタップ アクションをインスツルメント化できます。このインスツルメント化は、UIKitSwiftUI のハイブリッド アプリケーションでも機能します。

SwiftUI.View のタップアクションをインスツルメントするためには、以下のメソッドをビュー宣言に追加します。

import SwiftUI
import DatadogRUM

struct BarView: View {

    var body: some View {
        Button("BarButton") { {
            ...
        }
        .trackRUMTapAction(name: "Bar")
    }
}

バックグラウンドイベントの追跡

バックグラウンドイベントを追跡すると、セッションが追加され、課金に影響を与える可能性があります。ご質問は、Datadog サポートまでお問い合わせください。

アプリケーションがバックグラウンドにあるとき (例えば、アクティブなビューがないとき)、クラッシュやネットワークリクエストなどのイベントを追跡することができます。

Datadog の構成で、初期化時に以下のスニペットを追加します。

import DatadogRUM

RUM.enable(
  with: RUM.Configuration(
    ...
    trackBackgroundEvents: true
  )
)

iOS エラーの追跡

iOS Crash Reporting と Error Tracking は、アプリケーション内のあらゆる問題と最新のエラーを表示します。エラーの詳細や JSON を含む属性は RUM Explorer で表示できます。

デバイスがオフラインの時のデータ送信

iOS SDK は、ユーザー デバイスがオフラインのときでもデータの可用性を確保します。ネットワークが弱いエリアやデバイスのバッテリーが少ない場合、すべてのイベントはまずローカル デバイスにバッチで保存されます。ネットワークが利用可能になり、かつ iOS SDK がエンド ユーザーの体験に影響を与えないよう十分なバッテリー レベルになったら、すぐに送信されます。アプリケーションがフォアグラウンドにある間にネットワークが利用できない場合や、データのアップロードが失敗した場合は、そのバッチは送信に成功するまで保持されます。

つまり、ユーザーがオフラインでアプリケーションを開いても、データが失われることはありません。

: iOS SDK が過剰なディスク容量を使用しないよう、ディスク上のデータは古くなりすぎた場合に自動的に破棄されます。

サポートされるバージョン

iOS SDK と互換性のある OS バージョンおよびプラットフォームの一覧は、サポート対象バージョン を参照してください。

その他の参考資料