【iOS】applicationWillTerminate、willTerminateNotification がアプリのバックグラウンドで呼ばれない(not working, not called)【Swift】
目次
applicationWillTerminate、willTerminateNotification が呼ばれない
アプリキル時のクリーンアップ処理について、以下の記事でまとめさせていただきました。
【iOS】アプリが終了する直前(タスクキル前)にデータ保存などのクリーンアップ(cleanup)処理を行う【Swift・Xcode】
アプリキル時には、以下のメソッド、および Notification が iOS によって呼び出されるため、アプリ終了時の処理はここに記載するケースが多いと思います。
- AppDelegate.applicationWillTerminate
- willTerminateNotification
しかし、バックグラウンド状態のアプリがキルされる時に、これらが呼ばれないケースがありました。
本記事ではその事象の対処法について記載しています。
対処方法
Background Mode を ON にする
アプリがバックグラウンドで動いていない場合に、App スイッチャーからアプリを削除すると、applicationWillTerminate・willTerminateNotification が呼ばれません。
このため、アプリがバックグラウンドで動作するように構成する必要があります。
「Signing & Capabilities」から「Background Modes」を選択します。
ここでは「Location updates」を ON にして、バックグラウンドで位置情報を利用するようにアプリを構成しました。
allowsBackgroundLocationUpdates を true にする
前項の手順で、アプリをバックグラウンドで動作させるように構成しましたが、これだけではまだ「applicationWillTerminate・willTerminate」がバックグラウンドで呼ばれません。
今回の例では、「Location updates」を有効にしている場合は、実際にバックグラウンドで位置情報の取得を行っていないと、アプリはバックグラウンドで動作しません。
1 2 3 |
locationManager.requestAlwaysAuthorization() locationManager.startUpdatingLocation() locationManager.allowsBackgroundLocationUpdates = true |
上記のように記述し、バックグラウンドでアプリを動かしている必要があります。
こうすることで、バックグラウンド状態のアプリがキルされる直前に「applicationWillTerminate・willTerminate」が呼ばれるようになります。