AppSeedのアプリ開発ブログ

アプリ開発会社AppSeed(アップシード)開発担当のブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsや備忘録、アプリ開発に役立つ情報を発信します。

iOSアプリの審査でAppleからリジェクト時にクラッシュログが送られてきた場合の不具合調査方法

最近、僕の開発したアプリがAppleからリジェクトをくらったのですが、

リジェクトと一緒にAppleからクラッシュログが送られてきました。

今回は、Appleからクラッシュログが送られてきた場合に不具合の原因を調査する方法に関するメモをまとめておきたいと思います。

 

iOSアプリ審査でGuideline2.1のリジェクト

 

iOSアプリ審査でリジェクトをくらい、リジェクト通知と一緒にクラッシュログが添付されてきました。

Guideline 2.1 - Performance - App Completeness



We were unable to review your app as it crashed on launch. We have attached detailed crash logs to help troubleshoot this issue.

Next Steps

To resolve this issue, please revise your app and test it on a device to ensure it will launch without crashing.

Resources

For information on how to symbolicate and read a crash log, please review Tech Note TN2151 Understanding and Analyzing Application Crash Reports.
 

 クラッシュした時のログが記録されているっぽいのですが、

ざっとみてもイマイチどこでクラッシュしているのかとか、なんでクラッシュしているのかがよくわかりません。

iOSアプリの審査でAppleからリジェクト時にクラッシュログが送られてきた場合の不具合調査方法

 

このままだとお手上げなので、調べてみることにしました。

 

Appleからリジェクト時にクラッシュログが送られてきた場合のログの見方

qiita.com

上記の記事が大変参考になりました。

 

こちらによると、

スタックトレースは例外の発生状況と発生個所を示すもので、プログラムを実行した情報を「下から上に」積み上げていきます。
つまり一番上(とその周辺)に書かれた行のクラス・行数を見ることで、実際にどこでクラッシュしたのかを読み取ることができるのです。全ての行に目を通す必要はありません。

とのことなので、一番上の方に書かれた内容でクラッシュ原因を把握できるらしいです。

 

上記を参考に、Appleから送られてきたログを見直してみると、SIGKILLでクラッシュしていることがわかりました。

Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Termination Description: SPRINGBOARD, process-launch watchdog transgression: application<com.worksinc.pandano1>:13502 exhausted real (wall clock) time allowance of 20.00 seconds | ProcessVisibility: Unknown | ProcessState: Running | WatchdogEvent: process-launch | WatchdogVisibility: Foreground | WatchdogCPUStatistics: ( | "Elapsed total CPU time (seconds): 34.900 (user 34.900, system 0.000), 87% CPU", | "Elapsed application CPU time (seconds): 0.154, 0% CPU" | )
Triggered by Thread: 0 

エラーログを検索にかけてみると、以下のスレッドを発見しました。

github.com

 

こちらによると、FirebaseのUnity iOS向けSDK(6.13.0〜6.14.0)を組み込んだ人で同様にエラーが出ている人がたくさんいることがわかりました。

 

僕のアプリでもFirebase SDKを組み込んでおり、バージョンを確認したところ、不具合報告されているバージョンに該当することがわかりました。

 

最新版SDKでは上記の不具合が解消されていることが書かれていたので、Firebase SDKを最新版にアップデートして再申請しました。

 

こちらでは再現できていない不具合だったのでログから調査をするしかなかったのですが、今後も同様のリジェクトは考えられるのでログの見方は覚えておく必要があるなと思いました。