Xcodeは、アプリのdSYMファイルをdSYMアーカイブパスフォルダーに保存します。これは、iOSエージェントがクラッシュ・レポートをシンボル化するために使用するdSYMファイルを取得するフォルダーです。New Relicは、iOSエージェントのインストールプロセスの一部として、ビルド後スクリプトを提供しています。このスクリプトは、dSYMをNew Relicのマップファイル形式に自動的に変換し、クラッシュのシンボル化に必要なファイルをNew Relicにアップロードします。
自動スクリプト
iOSエージェントには、XcodeのRun Script [スクリプトの実行] ビルドフェーズから実行するシェルスクリプトであるrun-symbol-toolが含まれています。各ビルドの後、バックグラウンドでrun-symbol-tool.swiftを実行します。これにより、dSYMファイルがNew Relicマップファイル形式に変換され、New Relicにアップロードされます。
Xcode 14 では、Apple は新しく作成されたプロジェクトのデフォルト設定を変更してビットコードを無効にしました。App Store は、ビットコードがオフになっているアプリの提出のみを受け入れるようになりました。Xcode 14 のリリース ノートを参照してください。プロジェクトでビットコードが有効になっている場合は、無効にする必要があります。自動スクリプトでは、ビットコードを無効にする必要があります。
Apple は、ビットコード対応アプリ用に dSYM ファイルを生成します。ビットコード対応アプリの dSYM ファイルを Apple からダウンロードし、モバイル監視 UIを介して New Relic にアップロードする必要があります。
Crashesページに判読できないマシンコードが表示される場合、dSYM ファイルが正しくアップロードされていない可能性があります。 場合によっては、 dSYM ファイルを手動でアップロードする必要があります。
重要
iOSエージェントのバージョン7.4.8Pythonのアップロード・スクリプト(generateMap.py、generateMapPython2.py、およびnewrelic_postbuild.sh)を削除しました。Run Script [スクリプトの実行] ビルド・フェーズでまだnewrelic_postbuild.shを呼び出している場合は、以下のrun-symbol-toolスクリプトに置き換えてください。
Run Script [スクリプトの実行] ビルドフェーズを追加します
Xcodeで、navigator [ナビゲーター] からプロジェクトを選択し、次にアプリのターゲットを選択します。
Build Phasesタブを選択します。
+をクリックし、New Run Script Phaseを選択します。
新しいフェーズに次の行を追加します。
APP_TOKENをNew Relicのアプリケーション・トークンに置き換えます。bash$ARTIFACT_DIR="${BUILD_DIR%Build/*}"$SCRIPT=`/usr/bin/find "${SRCROOT}" "${ARTIFACT_DIR}" -type f -name run-symbol-tool | head -n 1`$/bin/sh "${SCRIPT}" "APP_TOKEN"
Xcode 15.3以降では、スクリプトがdSYMファイルを読み取り、ログを書き込めるように、User Script SandboxingをNoに設定します。「dSYMの自動アップロードの失敗」をご覧ください。
オプション引数
アプリのトークンの後に、任意の順序でオプションの引数を追加します:
議論 | 説明 |
|---|---|
| dSYMのパス、アップロードURL、アップロードコマンドなどの追加の詳細を |
| アップロードされたシンボルとともに報告されるアプリのバージョンを設定します。スクリプトは |
例えば:
$ARTIFACT_DIR="${BUILD_DIR%Build/*}"$SCRIPT=`/usr/bin/find "${SRCROOT}" "${ARTIFACT_DIR}" -type f -name run-symbol-tool | head -n 1`$/bin/sh "${SCRIPT}" "APP_TOKEN" -appVersion "1.4.2" --debugアプリバージョン
New Relicは、アップロードされたシンボルとビルドをアプリのバージョンによって照合します。スクリプトは、このリストから最初の空ではない値を使用します:
-appVersion引数- 環境変数
NEWRELIC_APP_VERSION MARKETING_VERSIONビルド設定- プレースホルダー
1.2.3
スクリプトがプレースホルダーを使用する場合、upload_dsym_results.logに警告をログに記録します。
agvtoolでバージョン管理されているアプリや、GENERATE_INFOPLIST_FILE = YESを使用するマルチターゲットアプリなど、一部のプロジェクトではMARKETING_VERSIONが設定されません。これらのプロジェクトでは、シンボルがビルドと一致するように、-appVersionを渡すかNEWRELIC_APP_VERSIONを設定します。
環境変数
標準のアップロードでは、これらの変数を設定する必要はありません。設定するには、同じRun Script [スクリプトの実行] フェーズ内のスクリプトの上にexport行を追加します:
$export NEWRELIC_APP_VERSION="1.4.2"$ARTIFACT_DIR="${BUILD_DIR%Build/*}"$SCRIPT=`/usr/bin/find "${SRCROOT}" "${ARTIFACT_DIR}" -type f -name run-symbol-tool | head -n 1`$/bin/sh "${SCRIPT}" "APP_TOKEN"スクリプトは、以下の環境変数をサポートしています:
変数 | 説明 |
|---|---|
| アップロードされたシンボルとともに報告されるアプリのバージョン。iOSエージェントのバージョン7.7.5以降が必要です。アプリのバージョンを参照してください。 |
| アップロードホスト。デフォルトは |
| マップファイルのアップロードのパス。デフォルトは |
| dSYMアップロードのパス。デフォルトは |
| マップ・ファイルのアップロード用のフォーム・フィールド名。デフォルトは |
| dSYMアップロード用のフォームフィールド名。デフォルトは |
スクリプトの仕組み
実行時に、スクリプトは次の処理を行います:
- アップロードはバックグラウンドで実行されるため、ビルドは完了を待ちません。スクリプトは結果を
upload_dsym_results.logに書き込みます。 - スクリプトはiOSシミュレーターのビルドをスキップします(
EFFECTIVE_PLATFORM_NAMEは-iphonesimulatorです)。 - Bitcodeが有効なビルド(
ENABLE_BITCODE = YES)は、アップロードを行わず、ビルドを失敗させることなく終了します。 - スクリプトは
DWARF_DSYM_FOLDER_PATH内の各dSYMをマップファイルに変換し、マップファイルをzip圧縮して、zipを/mapエンドポイントにアップロードします。 - dSYMを変換できない場合、スクリプトはそのdSYMをzip圧縮し、代わりに
/symbolエンドポイントにアップロードします。マップのアップロード自体が失敗した場合、スクリプトはHTTPステータス・コードをログに記録し、dSYMのアップロードへのフォールバックは行いません。その場合は、dSYMを手動でアップロードしてください。 - iOSエージェントのバージョン7.7.2以降では、zip圧縮されたマップファイルが200 MBより大きい場合、スクリプトはそれをアップロードしません。ファイルサイズとアプリのバージョンのみをNew Relicに送信します。dSYMを手動でアップロードしない限り、New Relicはそのビルドからのクラッシュをシンボリケートできません。
- スクリプトは、アプリケーション・トークンからアップロードのリージョン(US、EU、またはJP)を選択します。これらは、手動アップロードコマンドで使用されるホストと同じです。
欠落しているdSYMを特定する
Bitcodeが有効なアプリがApp Storeの審査やアドホック配信のためにAppleにアップロードされた場合、モバイルクラッシュレポートを適切にシンボル化できるように、dSYMをAppleから手動でダウンロードし、New Relicにアップロードする必要があります。アプリのアップロードから数分以内に、XcodeのArchives [アーカイブ] オーガナイザーを通じてこれらのdSYMをダウンロードできます。このような場合は、アーカイブを見つけてdSYMをダウンロードする手順に従ってください。
アプリにdSYMファイルがない場合は、モバイルモニタリングUIに次の3つのインジケーターが表示されます。
- Banner notification: Crash reportページにバナー警告が表示されます。 警告には次のように書かれています。
We were unable to locate your dsym.- Upload prompt: Crash type summaryページでは、dSYM ファイルが見つからない場合、自動的にアップロードするように求められます。
- Machine code: Crash reportページのクラッシュ スタック トレースには、人間が判読できるエラー メッセージではなく、マシン コードが表示されます。
モバイルモニタリングUIを介してdSYMファイルをアップロードする
New Relic UIから直接dSYMファイルを簡単にアップロードできます。サイズ制限については、制限事項をご覧ください。dSYMファイルをアップロードするには:
- one.newrelic.com > All capabilities > Mobileに移動します。 次に、リストからアプリを選択します。
- Crashes表示します。
- グループクラッシュのTotal crashesから特定のクラッシュを選択します。
- Upload dSYMクリックします。 dSYM を直接ドラッグ アンド ドロップするか、コンピューターからファイルを選択することができます。
dSYMファイルを手動でアップロードする
状況によっては、New RelicによるdSYMファイルの自動アップロードが失敗する場合があります。たとえば、ネットワーク障害が発生してアップロードが完了しない場合、upload_dsym_results.logに何が問題だったかが記録されます。New RelicがdSYMアップロードを処理する方法の追加情報については、「New Relic's Online Technical Community」を参照してください。
自動アップロードが失敗した場合は、dSYMファイルを手動でアップロードできます。複数のdSYMファイルがある場合は、1つのzipファイルにまとめることができます。サイズ制限については、「制限事項」を参照してください。以下のコマンドのYOUR_NEW_RELIC_APPLICATION_TOKENの値は、+[NewRelic startWithApplicationToken:](Objective-Cの場合)またはNewRelic.start(withApplicationToken:)(Swiftの場合)に使用されるキーと同じです。
以下のコマンドでは、フルパスまたは$HOMEを使用してください。シェルは、引用符内の~を展開しません。
dSYMファイルを手動でアップロードするには:
トラブルシューティング
run-symbol-toolスクリプトは、アップロードの成功または失敗にかかわらず、ビルドごとにプロジェクトのルートディレクトリにupload_dsym_results.logを書き込みます。ビルドごとに前のログが上書きされます。ログにより詳細な情報を書き込むには、--debug引数を追加します。
ビルドのログにupload_dsym_results.log: Operation not permittedと表示される場合は、「Automatic dSYM upload failures」を参照してください。
欠落しているdSYM
dSYMファイルが見つからない場合は、Xcodeビルド設定をチェックして、ファイルが生成されていることを確認する必要があります。ローカルでビルドされるフレームワークには個別のビルド設定があり、同様に更新する必要がある場合があります。
ビルド設定:
Debug Information Format : Dwarf with dSYM FileDeployment Postprocessing: YesStrip Linked Product: YesStrip Debug Symbols During Copy : Yes制限
以下のサイズ制限にご注意ください:
- モバイル監視UIまたはコマンドラインを介したzip圧縮されたdSYMのアップロードは、最大600 MBまで可能です。
- 自動スクリプトは、200 MBより大きいzip圧縮されたマップファイルをアップロードしません。「スクリプトの仕組み」を参照してください。