シンボリックでないクラッシュのビルド UUID を見つける

dSYM が New Relic にアップロードされないと、モバイルクラッシュレポートはシンボル化できません。New Relic に dSYM を手動でアップロードすることができます。ただし、その場合は、アプリをビルドするたびに新しい dSYM が作成されるため、どの dSYM がどのアプリのビルドに属しているのかを管理するのが難しくなります。

この場合、UUID のビルド識別子を使って、以下のことができます。

  • アプリのユニークなビルドを特定できます。
  • クラッシュをシンボル化する dSYM を見つけることができます。

ビルド UUID の表示

アプリケーションには複数のビルド UUID がある場合があります。1つはアプリケーションが構築する各 CPU アーキテクチャーに起因します。ビルド UUID は関連する dSYM 内にも格納されています。ビルド UUID は、dSYM を特定するために抽出することができます。

New Relic クラッシュレポートには、クラッシュしているアプリのビルド UUID も含まれています。ビルド UUID を表示する手順は以下の通りです。

  1. rpm.newrelic.com/mobile から、(モバイルアプリ) > Crashes > Crash Analysis を選択します。
  2. Crash listで、任意の行を選択します。
  3. 選択したクラッシュレポートのCrash Details ページの属性一覧から App Image Uuid を探します。

App Image Uuid が選択したクラッシュレポートの属性リストにない場合は、以下を行います。

  1. クラッシュの詳細をエクスポートします。
  2. エクスポートしたクラッシュレポートの Binary images セクションから ビルド UUID を探します。

クラッシュの詳細から抽出したビルド UUID を使って、不明な dSYM を探します。

バイナリイメージの例

エクスポートしたクラッシュレポートのバイナリイメージセクションの例を以下に示します。このセクションには、アプリケーションに含まれるすべての動的リンクライブラリのビルド UUID と、メインアプリケーションのビルド UUID があります。

この例では、メインアプリケーションは New Relic です。ビルド UUID は 117667e7b8d230cb8a908906c64e0227 です。これは、関連する dSYM を見つけるための手がかりとなる識別子です。

Binary Images:
0xb1000 - 0x30d000 New Relic armv7 <117667e7b8d230cb8a908906c64e0227> /var/containers/Bundle/Application/New Relic.app/New Relic
0x22290000 - 0x22292000 libSystem.B.dylib armv7 <39d6d6f7c2ac3de8bb29c40a1b66368a> /usr/lib/libSystem.B.dylib
0x22292000 - 0x222de000 libc++.1.dylib armv7 <017dba6c16b63f9ebecb9ddd0d0a4520> /usr/lib/libc++.1.dylib
0x222de000 - 0x222f9000 libc++abi.dylib armv7 <d32373f6c2153a509f6603750d213ffb> /usr/lib/libc++abi.dylib
0x222fc000 - 0x22667000 libobjc.A.dylib armv7 <94f6d325c1843f45b3a439b86fc9de15> /usr/lib/libobjc.A.dylib
0x22667000 - 0x2266c000 libcache.dylib armv7 <8009f99fb892331dbcb61cd740ff0f43> /usr/lib/system/libcache.dylib
0x2266c000 - 0x22676000 libcommonCrypto.dylib armv7 <f6db318471d732d39918ef36bde65cb7> /usr/lib/system/libcommonCrypto.dylib
0x22676000 - 0x2267c000 libcompiler_rt.dylib armv7 <cfa3ca12d6c2383abcaf3c8541e9b86c> /usr/lib/system/libcompiler_rt.dylib
0x2267c000 - 0x22683000 libcopyfile.dylib armv7 <d2b06020c3693c7b9d179434f8115ba0> /usr/lib/system/libcopyfile.dylib
0x22683000 - 0x226d3000 libcorecrypto.dylib armv7 <181437f8d9e53277ace439de8b3fd1ad> /usr/lib/system/libcorecrypto.dylib
0x226d3000 - 0x2271d000 libdispatch.dylib armv7 <bbb4bba2176039ab95a59d7a56f6eff8> /usr/lib/system/libdispatch.dylib

dSYM の検索と再シンボリック

dSYM の dSYM ビルド UUID を見つけるには、以下ののようにターミナルで dwarfdump コマンドを使います。

dwarfdump --uuid <path-to-dSYM>

以下の例では、New Relic dSYM が2つのビルド UUID を返しています。1つは ARMv7ARM64 でそれぞれ1つづつです。 ARMv7 のビルド UUID は、欠落しているクラッシュの のビルド UUID と一致します。

> dwarfdump --uuid ./New\ Relic.app.dSYM/Contents/Resources/DWARF/New\ Relic
UUID: 117667E7-B8D2-30CB-8A90-8906C64E0227 (armv7) ./New Relic.app.dSYM/Contents/Resources/DWARF/New Relic
UUID: B1A8C6EE-02B9-3C55-AEE7-308521873107 (arm64) ./New Relic.app.dSYM/Contents/Resources/DWARF/New Relic

シンボリックでないクラッシュをシンボリックにするには、指示に従って dSYM を手動でアップロードします。

関連情報