iOS と tvOS のモニタリング セットアップ
概要
このページでは、iOS SDK を使用して、リアル ユーザー モニタリング (RUM) と Error Tracking の両方に向けてアプリケーションをインスツルメント化する方法を説明します。RUM (Error Tracking を含む) または単体製品として Error Tracking を購入している場合は、以下の手順に従ってアプリケーションをインスツルメント化できます。
セットアップ
- SDK を依存関係として宣言します。
- UI でアプリケーションの詳細を指定します。
- ライブラリを初期化します。
- データの送信を開始するには、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"))
プロジェクトで、以下のライブラリをリンクします。
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 でアプリケーションの詳細を指定
データの安全性を確保するために、クライアント トークンを必ず使用してください。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
設定は以下のいずれかの値で示されます。
.pending
: RUM iOS SDK はデータの収集とバッチ処理を開始しますが、Datadog へは送信しません。RUM iOS SDK はバッチ処理が完了したデータをどうするかについての新たな同意値が得られるまで待機します。.granted
: RUM iOS SDK はデータの収集を開始し、Datadog へ送信します。.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
アプリケーションのビューをインスツルメント化できます。このインスツルメント化は、UIKit
と SwiftUI
のハイブリッド アプリケーションでも機能します。
SwiftUI.View
をインスツルメントするためには、以下のメソッドをビュー宣言に追加します。
import SwiftUI
import DatadogRUM
struct FooView: View {
var body: some View {
FooContent {
...
}
.trackRUMView(name: "Foo")
}
}
trackRUMView(name:)
メソッドは、SwiftUI
のビューが画面に表示される時と消える時にビューを開始および停止します。
タップアクションをインスツルメントする
Datadog iOS SDK は、SwiftUI
アプリケーションのタップ アクションをインスツルメント化できます。このインスツルメント化は、UIKit
と SwiftUI
のハイブリッド アプリケーションでも機能します。
SwiftUI.View
のタップアクションをインスツルメントするためには、以下のメソッドをビュー宣言に追加します。
import SwiftUI
import DatadogRUM
struct BarView: View {
var body: some View {
Button("BarButton") { {
...
}
.trackRUMTapAction(name: "Bar")
}
}
バックグラウンドイベントの追跡
アプリケーションがバックグラウンドにあるとき (例えば、アクティブなビューがないとき)、クラッシュやネットワークリクエストなどのイベントを追跡することができます。
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 バージョンおよびプラットフォームの一覧は、サポート対象バージョン を参照してください。
その他の参考資料