クラッシュログを象徴するためにこれらのすべての回答を読んだ後(そして最後に成功しました)、ここで欠落しているいくつかのポイントが、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
...
この抽出では、クラッシュログはexample.app/exampleという名前のアプリバイナリイメージとUUIDに属しています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ディレクトリでを実行して検索できます。
ご覧のとおり、指定されたパラメーターはありません。したがって、スクリプトはスポットライト検索を実行して、アプリケーションのバイナリとデバッグシンボルを見つける必要があります。と呼ばれる特定のインデックスでデバッグシンボルを検索します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を持つパッケージが提供されます。Spotlightが.dSYM
パッケージを見つけられない場合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
ます。
symbolicatecrash
、それを使用し、どのようにsymbolicationを行うために必要なdSYMファイルを見つけるする方法、コマンドを。