Message from debugger: Terminated due to signal 9

August 22, 2019 Yuuki Nishiyama 0 Comments

eSenseアプリを開発中に「Message from debugger: Terminated due to signal 9」が発生し、アプリがバックグランド状態で落ちている事が判明。バックグランド状態では、CPU利用率が80%を連続して60秒を超えるとiOSがアプリを強制終了する仕様みたい。原因発見までの手順と対策をメモ。

Message from debugger: Terminated due to signal 9」の具体的な原因が分からなかったので調べてみると、Xcodeの「Window →Devices and Simulators」から詳細を確認できるとのこと(本リンクを参照)。対象アプリのクラッシュログを確認すると、以下のように表示されていた。

Event:           cpu usage
Action taken:    Process killed
CPU:             48 seconds cpu time over 59 seconds (82% cpu average), exceeding limit of 80% cpu over 60 seconds
CPU limit:       48s
Limit duration:  60s
CPU used:        48s
Duration:        8.03s
Steps:           6

どうやらCPU利用率80%を60秒続けると強制終了させられるみたい。試しにCPUレポートから調べると、常時80%を超えていた。CPU利用率の原因を調べると、BLE通信やセンサデータ処理自体はそんなにCPUを食っていない。どうやらセンサデータを描画する処理が重いみたい。

バックグランド状態でも描画処理はフォアグランド時と同様に走ってるらしく、バックグランド時には表示を更新しない条件分岐を追加した。アプリの状態判定はUIApplicationからチェックできる。

if UIApplication.shared.applicationState == .active {
}else if UIApplication.shared.applicationState == .inactive {
}else if UIApplication.shared.applicationState == .background {
}

上記の条件分岐を追加すれば、100Hzでセンシングをしてもバックグランド状態で強制終了する事なくセンシングが可能になった。

Leave a Reply:

Your email address will not be published. Required fields are marked *