概要

iOS のクラッシュレポートとエラー追跡を有効にすると、リアルユーザーモニタリングで包括的なクラッシュレポートとエラートレンドを取得できます。この機能により、以下にアクセスが可能になります。

  • 集計済みの iOS クラッシュダッシュボードおよび属性
  • シンボル化された iOS クラッシュレポート
  • iOS エラー追跡とトレンド分析

スタックトレースを記号化するために、.dSYM ファイルを見つけて Datadog にアップロードしてください。その後、テストクラッシュを実行し、アプリケーションを再起動することによって、構成を確認します。

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

セットアップ

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

クラッシュレポートの追加

依存関係マネージャーに従ってパッケージを追加し、初期化スニペットを更新します。

DatadogSDKCrashReportingPodfile に追加します。

platform :ios, '11.0'
use_frameworks!

target 'App' do
  pod 'DatadogSDKCrashReporting'
end

https://github.com/DataDog/dd-sdk-ios にパッケージを追加し、DatadogCrashReporting をアプリケーションターゲットにリンクします。

注: DatadogDatadogStatic ライブラリにリンクする場合、代わりに DatadogCrashReporting にリンクしてください。

github "DataDog/dd-sdk-ios"Cartfile に追加し、 DatadogCrashReporting.xcframework をアプリケーションターゲットにリンクします。

初期化スニペットを更新してクラッシュレポートを含めます。

import DatadogCrashReporting

Datadog.initialize(
    appContext: .init(),
    trackingConsent: .granted,
    configuration: Datadog.Configuration
    .builderUsing(
        rumApplicationID: "<rum_application_id>",
        clientToken: "<client_token>",
        environment: "<environment_name>"
    )
    .trackUIKitActions()
    .trackUIKitRUMViews()
    .enableCrashReporting(using: DDCrashReportingPlugin())
    .build()
)
Global.rum = RUMMonitor.initialize()

クラッシュレポートのシンボル化

クラッシュレポートは生のフォーマットで収集され、そのほとんどがメモリアドレスを含んでいます。これらのアドレスを読みやすいシンボル情報にマッピングするために、Datadog は .dSYM ファイルを必要とし、これはアプリケーションのビルドまたは配布プロセスで生成されます。

dSYM ファイルを探す

すべての iOS アプリケーションは、アプリケーションモジュールごとに .dSYM ファイルを生成しています。これらのファイルは、アプリケーションのバイナリサイズを最小化し、より高速なダウンロードを可能にします。各アプリケーションのバージョンは、.dSYM ファイルのセットを含んでいます。

お使いの環境によっては、App Store Connect から .dSYM ファイルをダウンロードするか、ローカルマシンで検索する必要があります。

ビットコード有効説明
dSYM ファイルは、App Store Connect でアプリケーションのビルド処理が完了すると、利用可能になります。
Xcode は、アプリケーションのビルドの最後に、.dSYM ファイルを$DWARF_DSYM_FOLDER_PATH にエクスポートします。DEBUG_INFORMATION_FORMAT ビルド設定が、DWARF with dSYM File に設定されていることを確認します。デフォルトでは、Xcode プロジェクトは、Release プロジェクトの構成で、DEBUG_INFORMATION_FORMATDWARF with dSYM File にのみ設定します。

dSYM ファイルのアップロード

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

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

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

Datadog CI

dSYM ファイルのアップロードには、コマンドラインツール @datadog/datadog-ci を使用することができます。

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_SITE 環境変数を datadoghq.eu に設定します。インテークエンドポイントに完全な URL を上書きするには、DATADOG_DSYM_INTAKE_URL 環境変数を定義します。

また、Fastlane や GitHub Actions をワークフローで使用している場合は、datadog-ci の代わりにこれらのインテグレーションを利用することができます。

Fastlane Plugin

Datadogプラグインを使用すると、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 Action

Datadog Upload dSYMs GitHub Action は、GitHub Action のジョブでシンボルをアップロードできるようにするものです。

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 コマンドをご覧ください。

クラッシュレポートの検証

iOS のクラッシュレポートとエラー追跡の構成を確認するには、RUM アプリケーションでクラッシュを発生させ、Datadog にエラーが表示されることを確認します。

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

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

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

注: RUM は iOS v14+ arm64 および arm64e アーキテクチャのシステムシンボルファイルのシンボル化に対応しています。

その他の参考資料