アプリで問題が起こったときの状況を把握する

Chapter 13 の「デバッグで実装上の不備を見つける」では、デバッグの開始方法や、ブレークポイントやステップ実行の詳しい使い方、実行状況の把握の仕方について説明しました。そこで説明した事柄について、ここで補足します。

Xcode がインストールされていないコンピュータでクラッシュログを取得する

アプリがクラッシュしたときに、その状況が記されたクラッシュログが iOS デバイスに記録されることがあります。

クラッシュログを Xcode のデバイスオーガナイザーで取得する方法はXcode 5 徹底解説 for iOS/OS X13.7.1 アプリが強制終了した理由が記録されているクラッシュログを確認するで紹介しました。

Xcode がインストールされていない Mac や Windows からでも、iOS デバイスを iTunes で同期していれば、クラッシュログを取得できます。

クラッシュログの保存場所

iOS デバイスのクラッシュログは、iTunes で同期を取ると、次のフォルダーに転送されます。

コンピュータの OS クラッシュログの保存場所
OS X 10.9 ~/Library/Logs/CrashReporter/MobileDevice/
Windows 8 %USERPROFILE%¥AppData¥Roaming¥Apple Computer¥Logs¥CrashReporter¥MobileDevice¥

クラッシュログは、それが記録された iOS デバイス名でフォルダー分けされて保存されています。

ここに保存されている *.crash ファイルがクラッシュログファイルになります。ファイル名にはアプリの内部名と日付が含まれているので、それを元に目的のログを探します。そして、これをデバイスオーガナイザーにドロップすることでも取り込ませることが可能です。

クラッシュログの拡張子が "ips" の場合

クラッシュログがipsという拡張子で保存されている場合もあります。

このときは、ファイルの拡張子をcrashに書き換えることで、デバイスオーガナイザーに取り込むことが可能になります。

なお、これらのクラッシュログは内容に少し違いがあって、拡張子がipsのクラッシュログの場合は、ログの最初に JSON のような形式で、アプリ名や OS バージョンなど、そのログがどのような状況下で取得されたかを示す情報が付加されています。

クラッシュログの拡張子がどういう場合に違ってくるかを調べてみたところ、とりあえず iPhone 5 で iOS 7.0.4 では拡張子がcrashで記録されていたのですけど、このデバイスの iOS 7.1.1 にアップデートしたところ、拡張子がipsで記録されるようになりました。iOS のバージョンによって記録のされ方が変わったのかもしれません。