クラッシュが理由でアプリがリジェクトされる場合があります。その場合、クラッシュファイルというのが添付されてきます。ただ、このファイルをそのまま見ても何のことやらさっぱりわかりません。
今回、クラッシュの場所が特定できるように、このファイルを変換する方法を説明します
作業用のフォルダを作成
どこでもいいので、作業用のフォルダを作ります。ホームにcrashlogというフォルダを作りました
/Users/(ユーザ名)/Documents/crashlog
今回はここで作業することにしますよ
Appleから送られてきたクラッシュファイルを保存
このような感じで、クラッシュファイルが添付されてくるのでダウンロードして作業用フォルダに保存します。この画像では2個ありますが、大抵は1つだと思います
ArchivesのdSYMファイルを保存する
Organizerを開いて、申請したときのArchiveを選択して右クリックしてファイルをFinderで表示します
xxx.xcarchiveが開くので、これを右クリックして、「パッケージの内容を表示」を選びます
「dSYMs」というフォルダがあるので、中を見ると、xxxx.app.dSYMというファイルがあります
これを先ほど作成した作業用フォルダにコピーします
symbolicatecrashを実行する
2つのファイルの準備ができました。この2つのファイルから、変換したファイルを出力します
symbolicatecrashというツールを使用します。Xcodeのバージョンによって場所が異なるようです
Xcode8だと、
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
にあります
どこにあるのかわからない場合は
find /Applications/Xcode.app -name symbolicatecrash
で見つかると思います
ターミナルを起動して、作業ディレクトリに移動します
cd /Users/(ユーザ名)/Documents/crashlog
まず、環境変数を定義します。これを実行しないと
Error: “DEVELOPER_DIR” is not defined 〜
というエラーが出ます
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
いよいよ最後の作業です。クラッシュログを変換します
クラッシュログとdSYMファイルを入力して、crash.txtを出力します。ほんの少し時間がかかります
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash (クラッシュログファイル名) (dSYMファイル名) > crash.txt
これで、新しいファイルが出力されました
変換前のクラッシュログ。こんな感じで何が何だかわからなかったファイルが・・・
新しく出力されたクラッシュログ。これでどのクラスのどのメソッドでクラッシュしたのかわかりました
クラッシュの原因が、さっぱり検討つかない場合は非常に役に立ちます。ちょっと面倒ですけどね