web-dev-qa-db-ja.com

iOS 12は理由もなくバックグラウンドでアプリを終了します

IOS 12以降、CLLocationManagerはバックグラウンドで無限に実行されなくなりました。ランダムにクラッシュログなしでアプリが終了します。これは、iOS 12以前は正常に機能していました。

この問題を示すために、サンプルアプリを作成しました here

デモアプリはCLLocationManagerを起動し、これをバックグラウンドで実行し続けるだけです。バックグラウンドで実行している間、ログに記録して追跡します。問題は、iOSによってアプリが終了することです。デモアプリは、この問題を示すために作成されます。

再現手順

  1. デバイスでアプリを実行する
  2. ロケーションマネージャーへのグランドアクセス
  3. アプリをバックグラウンドに配置する
  4. 1〜48時間待つ

結果:

  1. アプリは終了します

ランダムな時間の後、アプリは理由もなく終了します。

期待される結果:

  1. アプリはまだ実行中です。

動作方法

これはApple Engineer:によって確認されます

CLLocationManagerの更新がフォアグラウンドで開始され、バックグラウンドで実行するためにすべての作業を行ったら、ロケーションの更新はバックグラウンドで次のようになるまで無限に実行されるはずです。

  • アプリは強制終了です
  • デバイスが再起動されます
  • アプリは位置情報の更新を停止します
  • アプリはCLLocationManagerオブジェクトを解放します
  • アプリがクラッシュする
  • iOSはメモリ不足によりアプリを終了しますが、
  • locationManagerオブジェクトがリリース、オーバーリリース、または上書きされます。 View Controllerがインスタンス化されていないことを確認する必要があります。これにより、locationControllerクラスがリセットされます。アプリがバックグラウンドにあるときにそれが発生した場合、更新プログラムを再起動します。これにより、アプリが最終的に中断されます。 locationControllerがシングルトンであることを確認する必要があります。
  • アプリがクラッシュしています。テストしているデバイスにクラッシュログがあるかどうかを確認します
  • iOSは、メモリ不足のためアプリを終了しています。この場合、デバイスにJetsamEventログがあり、アプリが終了していることがわかります。タイムスタンプを確認して、アプリの動作が停止した時間前後のタイムスタンプを見つけることができます。
22
Sjoerd Perfors

更新された回答:

AppleはiOS 12.2ベータ2(16E5191d)でこのバグを修正しました

オリジナルの分析とバグ検出:

Apple開発者テクニカルサポートと一緒に、Sysdiagnoseファイルでこの問題を分析しました。これらの guidelines に従って、デバイスにさらにログを記録するプロファイルをインストールできます。これらのログがどのように機能し、この問題をどこで見つけることができるかを正確に知っていますが、Appleは私のためにこれを行い、この最初の分析で来ました:

2018/10/22 01:01:12:587に確認した一時停止イベントで、これが表示されます(最後のアクティビティログの約1分後)

[CllocationManag:2725]説明で終了しています:{所有者=; target = rw.sp.flitsmeister.frameworks.CllocationManagerBackgroundTest; }

これは、システムがドライブ領域を必要とし、/ tmpおよび/ Library/Cachesディレクトリを削除できるようにアプリの束を殺したため、アプリが終了したことを基本的に言っています。このプロセスはiOS 12ではもう少し攻撃的であることがわかりましたが、256GBのデバイスを使用しており、クリーンアップ後に〜179 GBの空きがあることがわかりました。

さらにいくつかのsysdiagnoseと再生のケースを送信した後、Appleは分析に最善を尽くし、次の結論で終わりました:

残念ながら、良いニュースはありません。

現在、iOS 12には、システムがリソースを解放する必要があるため、長時間実行されているバックグラウンドアプリを定期的に終了する新しいメカニズムがあります。現時点では、このプロセスは少し攻撃的すぎるため、関連するチームと協力して、これがより良く動作するようにしています。

そのため、この時点でバグ報告を提出してください。症状を説明します。また、バグレポートとともにsysdiagnoseファイルをアップロードしてください。 (私はすでにあなたのものを送りましたが、新しいものを持っていることも害はありません)。バグ番号を教えてください。

つまり、現在iOS 12では、アプリがバックグラウンドで無限に実行されることはありません。バグレポートに記入しました。番号は45581276であり、このスレッドの更新を維持しようとします。

25
Sjoerd Perfors

アプリが動作を変更せずにバックグラウンドになったときに、/ tmpおよび/ Library/Cachesディレクトリを消去しようとしました。また、アプリがバックグラウンドロケーションを変更せずに処理するときにも、同じことを定期的に試しました。

3
Scott