【iOS11】徹底解説!クラッシュログを復元して解析する方法【watchOS4】

2020年8月27日

iOS・watchOSのクラッシュログを解析して、どこで処理が落ちたのかわかるようにする方法と解析したクラッシュログのみかたをご紹介します。

もくじ

  1. 準備するもの
  2. クラッシュログ(xxx.crash)を入手する
  3. dSYMファイル(xxx.dSYM)を入手する
  4. DeviceSupportファイルの確認
  5. クラッシュログの解析
  6. クラッシュログのみかた

1. 準備するもの

クラッシュログの解析には3つのファイルが必要です。

1.クラッシュログ(xxx.crash)
2.クラッシュが起きたアプリのdSYMファイル(xxx.dSYM)
3.クラッシュが起きた端末のDeviceSupportファイル

それぞれのファイルの入手方法も解析の手順としてご紹介するので、3つ必要なんだとということだけ頭の隅に入れておきましょう。

2. クラッシュログ(xxx.crash)を入手する

クラッシュログ(クラッシュレポート)の取得方法は何種かあります。
お好みの方法で取得してください。

2-1. iPhoneの端末からクラッシュログを取得

  • iOS10.3以上
    • 設定.App → プライバシー → 解析 → 解析データ
  • iOS 10.3未満
    • 設定.App → プライバシー → 診断と使用状況 → 診断データと使用状況データ

2-2. XcodeのOrganizerからクラッシュログを取得

Xcode → Window → Organizer → アプリを選択 → Crashes → AppStore → 任意のアプリバージョンを選択 → 任意のクラッシュを選択 → Show in Finder

開いたフォルダにある.carashを入手します。

3. dSYMファイル(xxx.dSYM)を入手する

Xcode → Window → Organizer → クラッシュログがでたアプリ → Archives → クラッシュしたアプリのバージョンと同じアーカイブ → Show in Finder

xxx.xcarchive → パッケージの内容を表示

dSYMsファイルの中にある.dSYMsを入手します。
iOSとwatchOSでは別のdSYMsになるので注意しましょう。

iOS:アプリ名.app.dSYM(例:TestApp.app.dSYM)
watchOS:アプリ名.appex.dSYM(例:TestApp Extension.app.dSYM)

4.DeviceSupportファイルの確認

クラッシュログを解析するには、.crash、.dSYMの他にクラッシュが発生した端末のDeviceSupportが必要になります。

クラッシュログに対応したDeviceSupportがPC(mac)にあるか確認しましょう。

4-1. クラッシュログから必要なDeviceSupportファイルのファイル名を確認

クラッシュログを開くと以下のような行があります。

OS Version: iPhone OS 11.4 (15F79)

この赤い部分のファイル名がDeviceSupportの中にあればOKということになります。

4-2.PC(mac)にあるDeviceSupportのバージョンを確認

ターミナルで「ls ~/Library/Developer/Xcode/iOS\ DeviceSupport/」と叩くとDeviceSupportの一覧を見ることができます。

ちなみに上記の画像の中には、4-1で確認したファイル名が見当たりませんね。
もし見つからない場合は、実機とPCをつなぐとDeviceSupportファイルが自動で作成されます。

また、iOSとwatchOSでDeviceSupportがある場所が違います。

iOS:ls ~/Library/Developer/Xcode/iOS\ DeviceSupport/
watchOS:ls ~/Library/Developer/Xcode/watchOS\ DeviceSupport/

watchOSの場合はwatchOSのDeviceSupportを確認してください。

5. クラッシュログの解析

いよいよクラッシュログの解析です。
今回はわかりやすいように、先ほど入手した「クラッシュログ(.crash)」と「dSYMファイル(.dSYM)」をデスクトップに移動し解析をしていきます。

あとはターミナルで解析するためのコマンドを叩くだけです。

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

ちなみに、以下のようなエラーが出る場合があります。

Error: "DEVELOPER_DIR" is not defined at /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash line 69.

そんな時は

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

パスを通してあげることでエラーがでなくなります。

デスクトップに解析したクラッシュログができていると思います。
中身を確認して何が原因でクラッシュしているかみてみましょう。

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   アプリ名                         	0x0000000102e1ae58 -[Crashlytics crash] + 0
1   アプリ名                         	0x0000000102d21d54 -[AccountViewController testCrash123] + 220500 (AccountViewController.m:133)
~ 略 ~

このように書いてある部分がクラッシュした箇所になります。

0の箇所でクラッシュし、数字の数が増えるごと、クラッシュまでに行った処理を遡って記述されるようになっています。

AccountViewControllerのtestCrash123関数を行って
次に、Crashlyticsのcrash関数を行った段階でクラッシュしていることがわかります。

プロジェクトを開き、AccountViewControllerにアクセスすると実際にクラッシュした箇所を見つけることができました。

以上で、クラッシュログを解析しクラッシュ箇所を見つける方法のご紹介になります。