このページは日本語には対応しておりません。随時翻訳に取り組んでいます。
翻訳に関してご質問やご意見ございましたら、お気軽にご連絡ください

概要

iOS Crash Reporting と Error Tracking を有効にすると、包括的なクラッシュ レポートとエラーのトレンドを取得できます。この機能により、以下にアクセスできます:

  • 集約された iOS クラッシュ ダッシュボードと属性
  • シンボリケート済みの iOS クラッシュ レポート
  • iOS Error Tracking によるトレンド分析

スタック トレースをシンボリケートするには、.dSYM ファイルを見つけて Datadog にアップロードします。次に、テスト クラッシュを実行してアプリケーションを再起動し、構成を検証します。

クラッシュ レポートは Error Tracking に表示されます。

セットアップ

iOS SDK をまだセットアップしていない場合は、アプリ内セットアップ手順 に従うか、iOS セットアップ ドキュメント を参照してください。

クラッシュ レポーティングを追加

Crash Reporting を有効にするには、使用している依存関係マネージャに応じてパッケージを追加し、初期化スニペットを更新します。

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

pod 'DatadogCrashReporting'

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

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

プロジェクトで、次のライブラリをリンクします:

DatadogCrashReporting

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

github "DataDog/dd-sdk-ios"

Xcode で、次のフレームワークをリンクします:

DatadogCrashReporting.xcframework
CrashReporter.xcframework

初期化スニペットを更新して Crash Reporting を含める

import DatadogCore
import DatadogCrashReporting

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

CrashReporting.enable()

アプリ ハング レポーティングを追加

アプリ ハングは、アプリケーションが長時間応答しないときに発生する iOS 固有のエラー タイプです。

既定ではアプリ ハングのレポーティングは 無効 ですが、初期化パラメータ appHangThreshold を使用すると有効化でき、指定した時間を超えるアプリ ハングを監視するための独自のしきい値を設定できます。しきい値を調整できることで、きめ細かな観測性とノイズの多さのバランスを最適化できます。設定の詳細は アプリ ハングのしきい値を構成する を参照してください。

アプリ ハングは iOS SDK を通じてレポートされます (Logs ではありません)。

有効化すると、指定した appHangThreshold より長いメイン スレッドの一時停止は、Error Trackingハング と見なされます。ハングには 2 種類あります:

  • 致命的なアプリ ハング: ハングから回復せず、アプリが終了された場合のレポート方法です。致命的なアプリ ハングには、Error Tracking と RUM Explorer で「Crash」のマークが付きます。

    Error パネルのサイドに表示された致命的なアプリ ハングの例。
  • 非致命的なアプリ ハング: 比較的短いハングからアプリが回復し、実行を継続した場合のレポート方法です。非致命的なアプリ ハングには、Error Tracking と RUM Explorer で「Crash」のマークは付きません。

    Error パネルのサイドに表示された非致命的なアプリ ハングの例。

アプリ ハング監視を有効化

アプリ ハング監視を有効にするには:

  1. Crash Reporting を有効化

  2. 初期化スニペットに appHangThreshold パラメータを追加して更新します:

    RUM.enable(
        with: RUM.Configuration(
            applicationID: "<application id>",
            appHangThreshold: 0.25
        )
    )
    
  3. アプリ ハングをレポートしたい最小の継続時間に appHangThreshold を設定します。たとえば、少なくとも 250 ms のハングをレポートするには 0.25 を指定します。設定の考え方は アプリ ハングのしきい値を構成する を参照してください。

    必ず、以下の手順に従って 難読化解除済みのスタック トレース を取得できるようにしてください。

アプリ ハングのしきい値を構成する

  • Apple は Xcode Organizer のハング率メトリクスで 250 ms を超えるハングのみを対象とします。Datadog は、appHangThreshold の初期値として同様に 0.25 を設定し、その後、適切な設定が見つかるまで段階的に下げるまたは上げることを推奨します。

  • ノイズとなるハングの大半をふるい落とすには、appHangThreshold を 2~3 秒に設定することをおすすめします。

  • appHangThreshold に設定できる最小値は 0.1 秒 (100 ms) です。ただし、しきい値を極端に小さくすると、ハングの過剰なレポートにつながる可能性があります。

  • SDK はアプリ ハングを監視するためのセカンダリ スレッドを実装しています。CPU 使用率を抑えるため、2.5% の許容誤差でハングを追跡します。そのため、appHangThreshold に近い長さの一部のハングはレポートされない場合があります。

アプリ ハング監視を無効化

アプリ ハング監視を無効にするには、初期化スニペットを更新し、パラメータ appHangThresholdnil に設定します。

ウォッチドッグ ターミネーションのレポーティングを追加

Apple エコシステムでは、オペレーティング システムがウォッチドッグ メカニズムを用いてアプリケーションの健全性を監視し、応答しなくなったり、CPU やメモリなどのリソースを過剰に消費した場合に終了させます。これらのウォッチドッグ ターミネーションは致命的で、復旧できません (詳細は公式の Apple ドキュメント を参照)。

既定ではウォッチドッグ ターミネーションのレポーティングは 無効 ですが、初期化パラメータ trackWatchdogTerminations を使用して有効化できます。

有効化すると、次回のアプリケーション起動時に、ヒューリスティックに基づいて前回のユーザー セッションにウォッチドッグ ターミネーションがレポートされ、紐付けられます:

  • その間にアプリケーションがアップグレードされていないこと

  • アプリが exitabort も呼び出していないこと

  • 例外、または致命的な アプリ ハング によるクラッシュではないこと

  • ユーザーによって強制終了されていないこと

  • デバイスが再起動していないこと (OS のアップグレードを含む)

Error Tracking のサイド パネルに表示されたウォッチドッグ ターミネーションの例。

ウォッチドッグ ターミネーションのレポーティングを有効化

ウォッチドッグ ターミネーションのレポーティングを有効化するには:

  1. Crash Reporting を有効化

  2. 初期化スニペットを trackWatchdogTerminations フラグで更新します:

    RUM.enable(
        with: RUM.Configuration(
            applicationID: "<application id>",
            trackWatchdogTerminations: true
        )
    )
    

ウォッチドッグ ターミネーションのレポーティングを無効化

ウォッチドッグ ターミネーションのレポーティングを無効化するには、初期化スニペットを更新し、パラメータ trackWatchdogTerminationsfalse に設定します。

難読化解除済みのスタック トレースを取得する

マッピング ファイルはスタック トレースの難読化を解除するために使用され、エラーのデバッグに役立ちます。生成される一意のビルド ID を使用して、Datadog は正しいスタック トレースを対応するマッピング ファイルに自動的に照合します。これにより、マッピング ファイルのアップロード時期がいつであっても (プレ プロダクション ビルドでもプロダクション ビルドでも)、Datadog にレポートされたクラッシュやエラーをレビューする際に、効率的な QA プロセスのための正しい情報を利用できます。

iOS アプリケーションでは、スタック トレースとシンボル ファイルの照合は、それぞれの uuid フィールドに基づいて行われます。

クラッシュ レポートをシンボリケートする

クラッシュ レポートは生の形式で収集され、多くはメモリ アドレスを含みます。これらのアドレスを可読なシンボル情報にマップするために、Datadog では dSYM ファイルが必要です。dSYM ファイルはアプリケーションのビルドまたは配布プロセスで生成されます。

.dSYM ファイルを見つける

すべての iOS アプリケーションは、各アプリケーション モジュールごとに .dSYM ファイルを生成します。これらのファイルはアプリケーションのバイナリ サイズを最小化し、ダウンロード 速度の向上に寄与します。各アプリケーション バージョンには .dSYM ファイル一式が含まれます。

セットアップによっては、.dSYM ファイルを App Store Connect からダウンロードするか、ローカル マシン上で見つける必要があります。

Bitcode Enabled説明
YesApp Store Connect がアプリケーションのビルド処理を完了した後に、.dSYM ファイルが利用可能になります。
NoXcode は、アプリケーションのビルドの最後に .dSYM ファイルを $DWARF_DSYM_FOLDER_PATH に書き出します。ビルド設定 DEBUG_INFORMATION_FORMATDWARF with dSYM File に設定されていることを確認してください。既定では、Xcode プロジェクトは Release プロジェクト構成でのみ DEBUG_INFORMATION_FORMATDWARF with dSYM File に設定します。

.dSYM ファイルをアップロードする

.dSYM ファイルを Datadog にアップロードすると、エラーに関連するスタック トレース内の各フレームのファイル パスと行番号にアクセスできます。

アプリケーションがクラッシュし、再起動されると、iOS SDK がクラッシュ レポートを Datadog にアップロードします。

: バージョンが変更されていない場合、ソース マップを再アップロードしても既存のものは上書きされません。

Datadog CI を使用して .dSYM ファイルをアップロードする

コマンド ライン ツール @datadog/datadog-ci を使用して、.dSYM ファイルをアップロードできます:

export DATADOG_API_KEY="<API KEY>"

// dSYM ファイルを含む zip ファイルがある場合
npx @datadog/datadog-ci dsyms upload appDsyms.zip

// dSYM ファイルを含むフォルダがある場合
npx @datadog/datadog-ci dsyms upload /path/to/appDsyms/

: ツールを EU エンドポイントで使用するには、環境変数 DATADOG_SITEdatadoghq.eu に設定します。インテーク エンドポイントの完全な URL を上書きするには、環境変数 DATADOG_DSYM_INTAKE_URL を定義します。

あるいは、ワークフローで Fastlane または GitHub Actions を使用している場合は、datadog-ci の代わりに、これらの連携を活用できます:

Fastlane プラグインを使用して .dSYM ファイルをアップロードする

Fastlane プラグインは、Fastlane 構成から Datadog に .dSYM ファイルをアップロードするのに役立ちます。

  1. fastlane-plugin-datadog をプロジェクトに追加します。

    fastlane add_plugin datadog
    
  2. シンボルをアップロードするように Fastlane を構成します。

    # download_dsyms action feeds dsym_paths automatically
    lane :upload_dsym_with_download_dsyms do
      download_dsyms
      upload_symbols_to_datadog(api_key: "datadog-api-key")
    end
    

詳細は fastlane-plugin-datadog を参照してください。

GitHub Actions を使用して .dSYM ファイルをアップロードする

Datadog Upload dSYMs GitHub Action を使用すると、GitHub Actions のジョブ内でシンボルをアップロードできます:

name: Upload dSYM Files

jobs:
  build:
    runs-on: macos-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Generate/Download dSYM Files
        uses: ./release.sh

      - name: Upload dSYMs to Datadog
        uses: DataDog/upload-dsyms-github-action@v1
        with:
          api_key: ${{ secrets.DATADOG_API_KEY }}
          site: datadoghq.com
          dsym_paths: |
            path/to/dsyms/folder
            path/to/zip/dsyms.zip            

詳細は dSYMs コマンド を参照してください。

制限事項

各 dSYM ファイルのサイズ上限は 2 GB です。

実装をテストする

iOS Crash Reporting と Error Tracking の構成を検証するには、アプリケーションでクラッシュを発生させ、Datadog にエラーが表示されることを確認します。

  1. アプリケーションを iOS シミュレータまたは実機で実行します。デバッガがアタッチされていないことを確認します。そうしないと、 iOS SDK より前に Xcode がクラッシュを捕捉します。

  2. クラッシュを含むコードを実行します:

    func didTapButton() {
    fatalError("Crash the app")
    }
    
  3. クラッシュ後、アプリケーションを再起動し、 iOS SDK が Error Tracking にクラッシュ レポートをアップロードするのを待ちます。

: Error Tracking は、iOS v14+ の arm64 および arm64e アーキテクチャ向けのシステム シンボル ファイルのシンボリケーションをサポートします。