Symbolicating iPhoneアプリクラッシュ報告
-
13-09-2019 - |
質問
思うsymbolicate iPhoneアプリのクラッシュ。
私は取得され、衝突からの報告iTunesます。私は、応用バイナリを提供したにApp Storeにやって、dSYMしたファイルを生成します。
私はこれらすべてのファイル内の単一のディレクトリを指数化によるサポートしていきます。※
何を?
しかしを呼び出す:
symbolicatecrash crashreport.crash myApp.app.dSYM
どちらも出力が同じテキストのクラッシュ報告を始め、symbolicated.
にしてるわけではありませんのですか。
解決
手順を解析プログラムからアップル
コピーします。アプリのファイルを押し込、appstoreで、.dSYMファイルで作成された時にリリース、クラッシュ報告を受けらAPPLEへ フォルダ.
端末用のフォルダを作成した上記の利用
cd
コマンド)走
atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH
.のメモリ場所なので、アプリの墜落とします。
Ex: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
この正確なライン、メソッド名その結果ンダリングする能力があります。
Ex: [classname functionName:]; -510
Symbolicating IPA
を使用した場合はIPAのためのsymbolicatingう名前の変更、拡張子.ipaです。zip解凍し、そのままペイロードフォルダを含むアプリです。この場合は要らない.dSYMファイルです。
注意
ことができる場合、アプリのバイナリがない記号に脱水されます。デフォルトでリリースを構築ぎの記号です。することで変更することが可能でプロジェクトのビルド設定の"ストリップのデバッグ記号の中にコピー"。
詳細はこの ポスト
他のヒント
読んだ後にこれらすべての答えがここにするためsymbolicateクラッシュログ(最後に行きたいという点もいくつかありますが抜けるなんのためのメソッドの呼び出しsymbolicatecrash出しませんsymbolicated出力に出力します。
3資産として組み合わせてつくってきsymbolicatingクラッシュログ:
- クラッシュでのログファイルそのもの(
example.crash
は、から輸出されXCodeの主催者または受iTunesから接続する本 - の
.app
パッケージ(example.app
)このこと自体を含むアプリのバイナリに所属するクラッシュログです。とした場合.ipa
パッケージ(example.ipa
)その内容を抽出することも可能で.app
パッケージを解凍の.ipa
パッケージ(unzip example.ipa
).その後の.app
パッケージに存在する抽出Payload/
フォルダにまとめた。 - の
.dSYM
パッケージにはデバッグシンボル(すなわちexample.app.dSYM
)
開始する前にsymbolicationを確認しておきましょう場合はすべての人工物に合、クラッシュログに所属するバイナリーで、デバッグシンボルの中の構築のたバイナリ.
各バイナリは、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 aa5e633efda8346cab92b01320043dc3
.
で確認することができUUIDのバイナリパッケージについては、dwarfdump:
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
この例ではすべての資産を組み合わせてつくって、対応することができるでしょうsymbolicateおstacktrace.
進 symbolicatecrash
スクリプト:
にXcode8.3対応することができるでしょうを呼び出すスクリプトによ
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
ていない場合がありますが、 find . -name symbolicatecrash
おXcode.アプリのディレクトリにティへ簡単にアクセスできます。
ご覧のとおりありませんより与えられたパラメータ.そのスクリプトを用バイナリのデバッグ記号走行スポットライト検索するこの検索のデバッグ記号は、特定の指標となりえる com_apple_xcode_dsym_uuids
.これまでに検索:
mdfind 'com_apple_xcode_dsym_uuids = *'
resp.
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
最初に注目呼び出しですべての物価連動dSYMパッケージには .dSYM
パッケージを特定のUUID.が注目されなく .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
このsymbolicatedバージョンのクラッシュログです。
ない場合で渡すことができます(ごdSYMます。アプリのファイル。
symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log
注意: のsymbolicated印刷する出力ターミナル、 symbolicate.log
.
Xcodeの(3.2.2)の最新バージョンを使用すると、デバイスに任意のクラッシュレポートをドラッグ&ドロップすることができますXcodeのオーガナイザーのセクションを記録し、彼らは自動的によってあなたのためsymbolicatedます。私はあなたがビルド&アーカイブ(Xcodeの3.2.2の一部でもある)
使用してアプリケーションのバージョンを構築した場合、これは最高の作品だと思いますかったのでこの成功は、ますます高まっています。
ステップ1: フォルダを作成し、デスクトップ、しっかりした名前りますようお願い申し上げますCrashReport"、三つのファイル("MYApp.アプリ""MyApp.アプリです。dSYM","MYApp_2013-07-18.クラッシュ")です。
ステップ2: オファインダーを応用してしまいますが、Xcode用右クリックここをクリックして"パッケージの内容を表示"今後はこの単純なパスです。"コンテンツ->ロー>プラットフォーム>iPhoneOS.プラットフォーム>開発者->図書館->PrivateFrameworks->DTDeviceKit.枠組み->バージョン->A->資源"
または
"コンテンツ->ロー>プラットフォーム>iPhoneOS.プラットフォーム>開発者->図書館->PrivateFrameworks->DTDeviceKitBase.枠組み->バージョン->A->資源"
または
のためのXcode6以上のパスが 用途/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.枠組み/バージョン/A/資源
にも利用されています。"symbolicatecrash"ファイルをコピー&ペーストりますようお願い申し上げますCrashReport"フォルダにまとめた。
ステップ3: 開端末、これらの3つのコマンド
cd/ユーザー/mac38/デスクトップ/CrashReport"と入力し、enterキーを押しボタン
輸出DEVELOPER_DIR="/アプリケーション/Xcode.app/Contents/開発者""と入力し、enterキーを押し
- ./symbolicatecrash-A-v MYApp_2013-07-18.クラッシュMyApp.アプリです。dSYM"と入力し、enterキーを押しで行われ..(注:バージョンの周辺で6.4以降ではないの-Aオプションではお任せしています。
テsymbolicateクラッシュ報告を利用して自動的にXCode:
更新XCODE9
接続 他の iOSデバイスをMacにあるかを物理的、そのきっかけをつくっていきたいバカバカしく)
待ちます。この著名な方々を講師としてお迎えし表示されます。もう
Command-A
そのDelete
加速す。重要な非正規滞在ステップ: 名前の変更、クラッシュ報告きiTunesConnectから
.txt
への拡張.crash
延長
そしてXcodeまsymbolicateのクラッシュ報告を表示します。
ソース: https://developer.apple.com/library/ios/technotes/tn2151/_index.html
使っていAirbrake私のアプリは、はかなり良い仕事をリモートエラーです。
まsymbolicateとしてすべく、atosの場合はバックトレニーズで
にXcode(4.2)の主催、右クリックし、アーカイブから る。ipaファイルが生成されます。
ターミナルcd のxcarchive のためのインスタンス
MyCoolApp 10-27-11 1.30 PM.xcarchive
以下の入力
atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp'
(忘れずにシングルクォーテーション)いま私のシンボルです。いただくものであるブロックにカーソルは空の路線です。
そのコピー/ペーストの私のシンボルコードでブロックにカーソルを押し ます。きのようなもの:
-[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)
い戻しをブロックとカーソルの貼り付けることができますその他の記号です。
できるかごバックトレイを入れ直すことなく最初のビットが素敵な時間をセーバー.
楽しめます!
私もdsymアプリを束ね、クラッシュログを同じディレクトリの実行前にsymbolicateクラッシュ
らかにしていきたいと考えているこの機能を定義するプロフィールを簡素化走行symbolicatecrash:
function desym
{
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}
引数の追加があります。
きによって実行されていることを確認スポットライト"を見て"おdysmファイルのコマンド:
mdfind 'com_apple_xcode_dsym_uuids = *'
のdsym真をクリックします。
注意:としての最新のXcodeが開発ディレクトリです。きこのユーティリティはこちら
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
Xcodeの6.1.1のためだけシンプルで更新答えます。
STEPS
1.Xcode> [ウィンドウ]> [デバイスます。
DEVICESセクション下デバイスのリストからデバイス2.Select。
3.Selectの表示デバイスログます。
すべてのログセクション4.Underあなたが直接report.crashをドラッグ&ドロップすることができます。
5.Xcodeが自動的にクラッシュレポートをSymbolicateされます。
6.You /時間があなたのクラッシュレポートに記載された日付とその日付/時刻を照合することによってSymbolicatedのクラッシュレポートを見つけることができます。
もってアプリ開発のための数年、初めてのバイナリのデバッグ感じのように完全に手伝コーヒーに飽きたら寿司に出場しているため、すべてのファイルがあるは*.アプリ*.dSYM、クラッシュログは?また読みを複数投稿するためです。写真文化については、まずこのポストを誰もいます。
1先行きitunesconnect、ダウンロード衝突します。注意:は多くの場合になる場合がありまようなもの"の数が少なすぎる報告書を提出した報告書に表示されます。" 基本的なユーザー宛てにクラッシュログはAppleる場合にはできないものとなります。
2-現した場合は変わらないコードまた提出先のバイナリーでリンゴをXcodeプロジェクトな製品-->アーカイブです。その他にリンクがお客様の最新の募バイナリを右クリックします。
Xcodeの4.2.1では、のオーガナイザーのオープン、その後、のライブラリ/デバイスログのに移動し、クラッシュログのリストにあなたの.crashファイルをドラッグします。これは、数秒後にあなたのためのsymbolicatedされます。
あなたは、元のビルドが(つまりビルドのためのアーカイブはのオーガナイザーの中に存在している必要があります)でアーカイブされたことのXcodeの同じインスタンスを使用しなければならないことに注意してください。
をXcodeとき4では、タスクをより簡単に:
- open 主催,
- をクリック 図書館/デバイスのログ 左側のカラム
- "をクリックし輸入"ボタンを押し、画面下部に...
とvoilà.ログファイルは輸入に象徴される自動できます。のままのアーカイブの構築を Xcode->製品>アーカイブ ます。
魔法のXcodeのオーガナイザーは、私のアプリをsymbolicatingについてその魔法ではありません。私は失敗したアプリの提出から戻って、アップルから得たクラッシュレポートのためにまったくのシンボルを得ませんでした。
私はの.appファイル(私が店に提出していること)と.dSYMファイルと同じフォルダにクラッシュレポートを入れて、コマンドラインを使用してみました
$ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app"
こののみ提供私のアプリのためのシンボルではなくコア基盤のコードが、それはオーガナイザーが私を与え、私が見つけ、私のアプリが持っていたクラッシュを修正するために十分だったされた数のダンプよりも良好でした。誰もが財団のシンボルを取得するには、これを拡張する方法を知っている場合、それをいただければ幸いです。
私の場合、私が主催するメールから直接クラッシュレポートをドラッグしました。 (私はなぜ知っているのが大好きです)symbolicated取得からクラッシュレポートを防ぐ何らかの理由で、。
最初のデスクトップにクラッシュレポートをコピーして、オーガナイザーにそこからそれらをドラッグすると、それらは適切にsymbolicatedてしまっています。
非常に特定の場合、私が知っています。しかし、私は念のために共有したいと思っています。
ここで私がsymbolicatecrashを持っている別の問題だ - それは彼らのバンドル(すなわち、「テストApp.app」)にスペースを持っているアプリでは動作しません。私のようなので、あなたは、とにかくこれらを削除する必要がありますが、あなたはすでに分析を必要とするクラッシュを持っている場合は、パッチsymbolicatecrash(4.3 GM)を提出する際、あなたが自分の名前にスペースを持つことができるとは思わない注意ます:
240c240
< my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app\"";
---
> my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == '$exec_name.app'\"";
251c251
< my $cmd = "find \"$archive_path/Products\" -name $exec_name.app";
---
> my $cmd = "find \"$archive_path/Products\" -name \"$exec_name.app\"";
利用の方Airbrakeある対応を上がるのではなく、働くひねる:
作品は、一部のメモリアドレスがない、ないしょうか---
- 新しいdirデスクトップにはどこまも
- 見アーカイブの問題にXcode主催者
- ダブルタップするファインダ
- ダブルタップにバンドル内容
- コピーします。dSYMファイル。アプリのファイルを新しいdir
- cd新dir
- このコマンドを実行する:atos...アarmv7-o'Inter.アプリの'/'Inter-'
- 端末に入双方向移動
- ペーストのメモリアドレスと、enterキーを押すと、出力メソッド名、行番号
- または、コマンドを入力:atos...アarmv7-o'Inter.アプリの'/'Inter-' る情報を一つのアドレスのみ
の組み合わせたかった:
- コピーのdSYMファイルのディレクトリのクラッシュ報告書
- 解凍し、ipaファイルを含むアプリ('unzip MyApp.ipa')
- コピーの適用のバイナリからの爆ペイロードを同じフォルダにクラッシュ報告シンボルファイルのようなもの"MyApp.app/MyApp")
- 輸入または再symbolicateの衝突からの報告内Xcodeの主催者
を使用 atos... ることが出来なかっ解決する正しいシンボル情報のアドレスおよびオフセットに対して優先的に取られるクラッシュ報告する。がっこいいもの見たさり、有意義できるように正当なスタックトレース.
私はそれが正常に実行するために取得するためにsymbolicatecrashスクリプトのハッキングの多くを行う必要がありました。
私の知る限り、symbolicatecrashは今.dsymと同じディレクトリにあると.APPが必要です。それは.APPを見つけるために.dsymを使用しますが、それはシンボルを見つけるためにdsymを使用しません。
あなたはそれがdsymに見えるようになり、これらのパッチを実行する前に、あなたのsymbolicatecrashのコピーを作成する必要があります:
getSymbolPathFor_dsymUuid機能でライン212の周囲に
212 my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);
matchesUUID機能でライン265の周囲に
265 return 1;
これは、後ろから明確な手順symbolicate全体にクラッシュログファイルです。
- コピーします。アプリcrash_reportとDSYMファイルフォルダにまとめた。
- 接続し、デバイスとxcode
- そしてウィンドウ->機器選択→表示デバイスのログ
- を選択しこのデバイスをすべて削除します。
- ップロードを行う場合、カラーラデバイスのログです。自動的にsymbolicateにあります。で右クリック報告を輸出します。
嬉しいコーディング
Riyaz
私は好 スクリプト まsymbolicate全てのクラッシュます。
前提条件
フォルダを作成し入れが4つもの:
symbolicatecrash
perlスクリプトが多いの答えを伝えるので場所のアーカイブの構築に一致するクラッシュからXcode主催社へ一任しております。単純な
Show in Finder
およびコピー)[いくことがnecessery]すべての
xccrashpoint
パッケージからXcode主催社へ一任しております。Show in Finder
, 合コピーのすべてのパッケージのディレクトリ、またはシングルxccrashpointいsymbolicate)この短いスクリプトのディレクトリ:
#!/bin/sh echo "cleaning old crashes from directory" rm -P *.crash rm -P *.xccrashpoint rm -r allCrashes echo "removed!" echo "" echo "--- START ---" echo "" mkdir allCrashes mkdir symboledCrashes find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \; cd allCrashes for crash in *.crash; do ../symbolicatecrash $crash > ../symboledCrashes/V$crash done cd .. echo "" echo "--- DONE ---" echo ""
のスクリプト
実際にスクリプトを取得するでしょう2つのディレクトリが入っています。
allCrashes
-すべてのクラッシュのすべてのxccrashpoint
があります。symboledCrashes
-同一クラッシュがすべての記号です。すんなりクリーンをディレクトリからの衝突前のスクリプトを実行すると.でクリーン動します。幸運を祈っています。
クラッシュをsymbolicateするためには、スポットライトは、あなたがアップルに提出したバイナリがしたと同時に、生成された.dSYMファイルを見つけることができなければなりません。それはシンボル情報が含まれているので、それが利用できない場合、あなたは運外となります。
私はここで何がそう、私はいくつか調査しなかったし、結果は「ただ働き」に思わないという事実について少し不機嫌です
セットアップ:レポートを受け取るバックエンドをQuincyKit。何symbolicationは、私も彼らは、私はそれを動作させるために行う示唆されたかを把握するために始めることができなかったとして設定されていません。
修正:オンラインサーバーからのクラッシュレポートをダウンロードしてください。彼らは、「クラッシュ」と呼ばれ、デフォルトでは〜/ダウンロード/フォルダに移動します。このことを念頭に置いて、このスクリプトは、「正しいことを行う」になるとクラッシュレポートは、Xcodeの(主催、デバイスのログ)に入りますとsymbolicationが行われます。
スクリプトます:
#!/bin/bash
# Copy crash reports so that they appear in device logs in Organizer in Xcode
if [ ! -e ~/Downloads/crash ]; then
echo "Download a crash report and save it as $HOME/Downloads/crash before running this script."
exit 1
fi
cd ~/Library/Logs/CrashReporter/MobileDevice/
mkdir -p actx # add crash report to xcode abbreviated
cd actx
datestr=`date "+%Y-%m-%d-%H%M%S"`
mv ~/Downloads/crash "actx-app_"$datestr"_actx.crash"
物事はあなたがQuincyKit / PLCRを使用しない場合は、二つのことを行うことでドラッグして、XcodeのOrganizerでドロップできる場所に自動化することができます。
まず、リモートスクリプトの管理/ actionapi.phpを編集する必要が〜ライン202(タイムスタンプの権利を取得していないようですので、ファイルがXcodeのは認識しません名「クラッシュ」で終わりますそれは)クラッシュドット何かを望んでます:
header('Content-Disposition: attachment; filename="crash'.$timestamp.'.crash"');
第二に、QuincyKit BWCrashReportTextFormatter.m〜ライン176中のiOS側では、不正な文字を回避するために@"[TODO]"
する@"TODO"
を変更します。
ATOSはので、もしあなたがOSX 10.9を実行しているか、後であなたが実行する必要があるかもしれ廃止される予定です。
xcrun atos
警告:は/ usr / binに/ ATOSが動いていると、将来のOSから削除されます Xリリース。あることがXcodeデベロッパツールで使用できるようになりました 経由で呼び出さ:
xcrun atos
私はバイナリ拒絶反応をアップロードし、元のアプリでエラーを特定するためのTextWranglerを使用したいです。 (クラッシュデータは、あなたのitunesConnectのアカウントに記載されています。)私はTextWranglerのにoriginal.crashをコピーの上サチンの方法を使用して、その後、私は別のTextWranglerのファイルに作成したsymbolicatecrashファイルをコピーします。 2つのファイルを比較すると、違いを正確に特定します。 symbolicatecrashファイルには、問題のファイルと行番号を指摘違いを持つことになります。
見つけられなくなることも提案した代替案の作動しなかった最新XCode(試Xcode10)となります。例えば、無かったのですが縁抵抗低下します。クラッシュでログインXcode->主催者->デバイスのログができます。
私の使用をお勧めしSymbolicatorツール https://github.com/agentsim/Symbolicator
- ロSymbolicatorリポジトリとコンパイルや実行とXcode
- コピーします。クラッシュファイル(asciiファイルは、スタックトレース新宿高層ビルも見え眺望が良好ファイル)となります。xarchiveチリリースと同じtemporarlyフォルダ
- ドラッグドロップします。クラッシュファイルをSymbolicatorアイコンドック
- に5-30秒symbolicatedクラッシュファイルが同じフォルダです。クラッシュ。xarchiveいて
私たちは気持ちが使用することは非常にタイムリーかつ便利で、クラッシュログを監視するには、Google Crashlyticsを使用します。
ドキュメントへのリンク: https://docs.fabric.io/apple/crashlytics/行方不明-dsyms.html#行方不明-dsymsする
すべての欠落dSYMsについて ファブリックは、自動的にプロジェクトのdSYMをアップロードするためのツールが含まれています。ツールは、オンボーディングプロセス中にあなたのスクリプトを実行ビルドのフェーズに追加された/実行スクリプト、を介して実行されます。アプリ内のビットコードを使用している場合dSYMのアップロードが原因でユニークなプロジェクト構成の失敗した場合か、しかし、特定の状況が存在する場合があります。アップロードが失敗した場合、Crashlyticsはクラッシュをsymbolicateして表示することができない、そして「ミッシングdSYM」アラートは、あなたのファブリックのダッシュボードに表示されます。
ミッシングdSYMsは、手動で以下の手順以下のアップロードすることができます。
注: 自動化されたdSYMアップロードツールに代わるものとして、ファブリックは、手動でプロジェクトのビルドプロセスの一部として実行するように構成することができるコマンドラインツール(アップロード-シンボル))を提供します。設定手順については、下記のアップロード・シンボルのセクションを参照してください。
...