ここでこれらすべての回答を読んでクラッシュログをシンボリック化する (そして最終的に成功した) 後、symbolicatecrash の呼び出しがシンボリック化された出力を生成しない理由を判断するために、ここにはいくつかの重要な点が欠けていると思います。
クラッシュ ログをシンボリック化する際に合わせなければならない 3 つのアセットがあります。
example.crash
XCode のオーガナイザーからエクスポートされた、または iTunes Connect から受信したクラッシュ ログ ファイル自体 (つまり)。
- クラッシュ ログに属するアプリ バイナリを含む
.app
パッケージ (つまり) 。パッケージ (つまり)example.app
がある場合は、パッケージを解凍してパッケージを抽出できます (つまり)。その後、パッケージは展開されたフォルダーに存在します。.ipa
example.ipa
.app
.ipa
unzip example.ipa
.app
Payload/
.dSYM
デバッグ シンボルを含むパッケージ (つまりexample.app.dSYM
)
シンボリック化を開始する前に、これらすべてのアーティファクトが一致するかどうかを確認する必要があります。つまり、クラッシュ ログが所有しているバイナリに属しており、デバッグ シンボルがそのバイナリのビルド中に生成されたものであることを意味します。
各バイナリは、クラッシュ ログ ファイルで確認できる UUID によって参照されます。
...
Binary Images:
0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...
この抜粋では、クラッシュ ログは、UUID を持つ example.app/example という名前のアプリ バイナリ イメージに属していますaa5e633efda8346cab92b01320043dc3
。
dwarfdump を使用して、バイナリ パッケージの UUID を確認できます。
dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example
その後、デバッグ シンボルもそのバイナリに属しているかどうかを確認する必要があります。
dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example
この例では、すべてのアセットが一緒に収まり、スタック トレースをシンボル化できるはずです。
symbolicatecrash
スクリプトに進む:
Xcode 8.3 では、次の方法でスクリプトを呼び出すことができるはずです。
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
そこにない場合はfind . -name symbolicatecrash
、Xcode.app ディレクトリで a を実行して見つけることができます。
ご覧のとおり、これ以上パラメーターは指定されていません。そのため、スクリプトはスポットライト検索を実行して、アプリケーションのバイナリとデバッグ シンボルを見つける必要があります。という特定のインデックスでデバッグ シンボルを検索しますcom_apple_xcode_dsym_uuids
。この検索は自分で行うことができます。
mdfind 'com_apple_xcode_dsym_uuids = *'
それぞれ
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
最初のスポットライト呼び出しでは、すべてのインデックス付き dSYM パッケージが提供され、2 回目の呼び出しでは.dSYM
、特定の UUID を持つパッケージが提供されます。.dSYM
Spotlight がパッケージを見つけられない場合symbolicatecrash
は、どちらも見つけられません。たとえば、~/Desktop
スポットライトのサブフォルダーでこれらすべてを行うと、すべてを見つけることができるはずです。
symbolicatecrash
でパッケージが見つかった場合.dSYM
、 に次のような行があるはずですsymbolicate.log
。
@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )
.app
パッケージを見つけるために、次のようなスポットライト検索が によって呼び出されsymbolicatecrash
ます。
mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"
symbolicatecrash
でパッケージが見つかった場合.app
、次の抜粋が にあるはずですsymbolicate.log
。
Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH
これらのリソースがすべて見つかったsymbolicatecrash
場合は、クラッシュ ログのシンボリック バージョンを出力する必要があります。
そうでない場合は、dSYM および .app ファイルを直接渡すことができます。
symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log
注:シンボリック化されたバックトレースは、ではなく端末に出力されますsymbolicate.log
。