iOS と tvOS のクラッシュレポート

New Relic Mobile はモバイルアプリのクラッシュレポートを作成します。 iOS や tvOS アプリケーションがクラッシュすると、OS はクラッシュレポートを作成し、デバイスに保存します。New Relic Mobile は、次回のアプリ起動時にこのレポートを New Relic にアップロードします。

このレポートと関連する dSYM ファイルを使って、人間が読める情報と完全なスタックトレースを含むクラッシュレポートが作成されます。New Relic Mobile にログインして、クラッシュしたメソッドや行、デバイス、環境情報など、クラッシュごとに確認できます。

クラッシュレポートは、New Relic Mobile のバージョン4以降で使用できます。

dSYM ファイルについて

iOS や tvOS アプリのリリースビルドを作成すると、メソッド名とクラス名が削除され、マシンが読み取り可能なメモリアドレスだけが残ります。アプリがクラッシュすると、スタックトレースはこのマシンが読めるコードで構成されます。

dSYM ファイルは、「デバッグシンボル」を表す Xcode プロジェクトのファイルです。これには、最初のクラッシュレポートを人間が読める形式に変換するためのデバッグシンボルが含まれています。このプロセスは symbolication として知られています。

New Relic Mobile は、dSYM アップロード用のダイナミックフレームワークサポートを持っています。これは、アプリケーションが複数の dSYM ファイルを含むダイナミックフレームワークを使用している場合、New Relic はそれらのファイルを自動的にアップロードして使用することを意味します。

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

アプリの dSYM ファイルは、Xcode の dSYM アーカイブパスのフォルダに保存されています。これは、New Relic Mobile がクラッシュレポート用の dSYM ファイルを取得するフォルダです。

New Relic のポストビルドスクリプトは、最初のインストールプロセスの一部としてコードに挿入されています。そして、これは、アプリの dSYM ファイルを自動的にアップロードして使います。New Relic Mobile のインストールプロセスの詳細については、iOS エージェントのインストールtvOS エージェントのインストールをご覧ください。

dSYM ファイルは、リリースビルド用にのみ New Relic が自動的にアップロードします。非リリースビルド用にはアップロードされません。

ビットコード対応のアプリには、Apple が生成した dSYM ファイルがあるため、Apple から dSYM ファイルをダウンロードし、New Relic にアップロードする必要があります。詳しくは、ビットコード対応アプリの dSYM のアップロードをご覧ください。

Crashes ページに読めないマシンコードが表示された場合、原因は、dSYM ファイルが正しくアップロードされていないことだったします。場合によっては、dSYM ファイルを手動でアップロードしてください。

クラッシュレポーターのデバッグ

クラッシュレポートはデフォルトで有効です。ただし、無効になる状況があります。

  • デバッガーが有効な場合: 1つのアプリにつき、1つの未捕捉例外ハンドラのみ登録できます。デバッガを接続して実行している場合、New Relic はクラッシュをキャプチャやレポートを行いません。
  • 別のクラッシュレポーターが有効な場合:New Relic が起動した後で別の未キャッチ例外ハンドラが登録されている場合、以下のエラーメッセージがログに記録されます。
"The New Relic exception handler has been replaced. 
 This may result in crashes no longer reporting to New Relic."

クラッシュレポートの無効化

To disable New Relic のクラッシュレポートを無効にするには、[NewRelic startWithApplicationToken:YOUR_APP_TOKEN]; の前に以下の API メソッドを呼びます。

[NewRelicAgent disableFeatures:NRFeatureFlag_CrashReporting];

この呼び出しに関する詳しい説明は、NewRelic.h ファイルをご覧ください。適用可能なフィーチャーフラグについては、NewRelicFeatureFlags.h ファイルをご覧ください。

dSYM の手動アップロード

状況によっては、New Relic の dSYM ファイルの自動アップロードが失敗することがあります。その場合は、dSYM ファイルを手動でアップロードする必要があります。複数の dSYM ファイルがあり、手動でアップロードする場合は、個別にアップロードが必要です。

dSYM のアップロードに失敗すると、詳細なメッセージ付きのビルドエラーが作成されます。たとえば、ネットワーク障害が発生し、dSYM のアップロードが完了しなかった場合、Xcode はエラーを報告します。

コマンドラインから dSYM ファイルを手動でアップロードする手順は以下の通りです。

  1. dSYM ファイルを探します。

    dSYM ファイルのパスを見つける方法の一つは、Generate YOUR_APPNAME.app.dSYM ステップの下にある Xcode のレポートナビゲータを調べることです。例えば以下を見てください。

    iOS-Agent-generate-dSYM-build-step.png

    例: dSYM ファイルのパスを見つける方法の1つとして、上記強調部分を見てください。

  2. 以下のコマンドでビルド UUID を生成します。~/dSYM_PATH を dSYM パスで置き換えます。

    xcrun dwarfdump --uuid ~/dSYM_PATH | tr '[:upper:]' '[:lower:]' | tr -d '-'| awk '{print $2}' | xargs | sed 's/ /,/g'

    後の手順用に、結果の出力を保存しておきます。

  3. dSYM をアーカイブするには、以下のコマンドを実行します。~/ZIPPED_DSYM_PATH を新しい dSYM アーカイブ・パスとファイル名に置き換え、~/DSYM_PATH を既存の dSYM ファイル・パスに置き換えてください。

    /usr/bin/zip --recurse-paths --quiet "~/ZIPPED_DSYM_PATH" "~/DSYM_PATH"
  4. 以下のコマンドを使って、dSYM Zip ファイルをアップロードします。

    curl -F dsym=@"~/DSYM_ZIP_PATH" -F buildId="YOUR_UUID" -F appName="YOUR_APP_NAME" -H "X-APP-LICENSE-KEY: YOUR_NEW_RELIC_APPLICATION_TOKEN" https://mobile-symbol-upload.newrelic.com/symbol

    上記のコマンドの YOUR_UUID は、手順2で生成したカンマ区切りのリストです。アプリケーショントークンは、+[NewRelic startWithApplicationToken:YOUR_APP_TOKEN]; で使われたキーと同じです。アプリ名は、Xcode のビルド設定の Product Name フィールドに表示される名前です。

自動アップロード失敗のトラブルシューティング

dSYM の自動アップロードに失敗した場合でも、レポートナビゲーターに完全な cURL コマンドが存在することがあります。この cURL コマンドを使って、アップロードを試すことができます。エラーによっては、dSYM の手動アップロード手順に沿って行う必要がある場合もあります。

レポートナビゲーターで正常にアップロードされた dSYM の例。

iOS-Agent-PostBuildScript-Example.png
レポートナビゲータに正常にアップロードされた dSYM

関連情報

関連する情報は以下のとおりです。