【Xcode9】iTunesConnectでリジェクトされた時のクラッシュレポート解析方法メモ。【symbolicate】

アプリリジェクトされた!!!!!!!

ということで今までやってこなかったクラッシュレポートの解析をしてみたのでメモしていきます。

 

クラッシュレポートをダウンロード

今回リジェクト時にResolution Centerに届いたメッセージ。

Your app crashed on iPad or iPhone running iOS 11.2.5 connected to an IPv6 network during our review.

We have attached detailed crash logs to help troubleshoot this issue.

まずは、こちらに添付されていたXXXX.crashというファイルをダウンロードします。

適当にデスクトップにcrashというフォルダを作ってその中に入れました。

 

dSYMをクラッシュレポートと同じ場所に配置

XcodeのメニューバーよりWindow > Organizerを開く。

実際に審査に出したバージョンと同じバージョンを右クリックし、Show in Finderを開く。

 

出てきたXXX.xcarchiveファイルを右クリックし、パッケージの内容を表示を選択。

 

dSYMs > App名.app.dSYMをコピーしてクラッシュレポートのあるディレクトリに配置。

 

~/Desktop/crashフォルダの中にApp名.app.dSYMとXXXX.crashの2つがあればおkです。

クラッシュレポートの名前は長かったら短くしておくと良いと思います。

 

クラッシュレポートを読めるようにする!

添付されているクラッシュレポートをそのまま読もうとしてもこんな感じで何が書いてあるのかさっぱりわからんです。

なのでこれを読めるようにしていきます。

 

ターミナルを開き、先ほど配置したcrashフォルダまで移動

cd ~/Desktop/crash

そいでここで、

(symbolicatecrashのpath) -v (クラッシュレポートのpath) (dSYMのpath) > crash.txt

というコマンドを打ちます。書き出しが必要なければcrash.txtはいらないです。(ターミナル上で書き出されたのを読むことになります!)

symbolicatecrashまでのpathはXcodeのバージョンによって違うらしいです。(iOSのクラッシュログをSymbolicate(復元)して解析する参照)

自分の環境では(Xcode9)

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

でした。

App名:hoge
クラッシュレポート名:hoge.crash とした場合は

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v ~/Desktop/crash/hoge.crash ~/Desktop/crash/hoge.app.dSYM > crash.txt

を実行すればcrash.txtに書き出されます。

 

書き出したテキストファイルを見てみると、クラッシュした場所がわかるようになっています。

CameraViewController.swift内の139行目で落ちてるよ!!!ってことまでわかります。

 

もっと難しいイメージだったんですが、意外と簡単でした!!!良かった!!

 

うまくいかなかった方法。。。。

最初は「iTunes Connectクラッシュレポートを分析する方法」を参考にさせていただき、上記と同様にXXX.crashとアプリ名.app.dSYMファイルを同じフォルダに入れ、

atos -o アプリ名.app.dSYM/Contents/Resources/DWARF/アプリ名 -arch arm64 -l 0x0000000100a67624 0x1009f4000

と言ったやり方をやってみました。(0x000~以降はクラッシュした箇所)

んで本当は指定したアドレスが指す箇所がsymbolicateされて読めるようになるはずなんですが何故かsymbolicateされなくて

0xfff8c9dc (in アプリ名)

ってアドレスがそのまま返ってきちゃうんですよね。

なんか手順を間違っているのかわからんのですが、上手くいきませんでした。

 

とりあえず上記の方で上手く言ったので良しとしました。

無事クラッシュの再現ができ、再審査に提出!!!!

クラッシュレポート見るまではIPv6環境のせいかなと思っていましたが(レビューメッセージの内容的に)レポート見てみたらIPv6全然関係なかったです。

 

メモのつもりが結構ちゃんと書いちゃった。ではでは。

 

 

 

2018/04/14追記
もうクラッシュも怖くないぞ!!!(怖い
iOS
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

UINavigationController + UIScrollView の組み合わせで使っている時に謎の余白ができる時

UINavigationController + UIScrollView の組み合わせで使っていて、UIScrollView 上に AutoLayout で上下左右0で View を設置しているのに、30px程度上にずれてしまうとき。

`navigationController.navigationBar.isTranslucent = false` にすると直るかもしれない。

ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。

通常のターゲットではちゃんと動いているのに、iOSSnapshotTestCase を用いたテストでだけこの対応が必要なのよくわからないけれど。。。

iOS

記事を書くほどでもないけれどメモっておきたいこと

テスト投稿。

例えばiphone7 の画面サイズ

750 × 1334
半分375 × 667

iOS

UITableView.RowAnimation の .none はアニメーションするよ

UITableView.RowAnimation の .none はアニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。

The inserted or deleted rows use the default animations.

なのでアニメーションしちゃう。今更の気づき。

 

iOS
more