IOS 12以降、CLLocationManagerはバックグラウンドで無限に実行されなくなりました。ランダムにクラッシュログなしでアプリが終了します。これは、iOS 12以前は正常に機能していました。
この問題を示すために、サンプルアプリを作成しました here
デモアプリはCLLocationManagerを起動し、これをバックグラウンドで実行し続けるだけです。バックグラウンドで実行している間、ログに記録して追跡します。問題は、iOSによってアプリが終了することです。デモアプリは、この問題を示すために作成されます。
再現手順
結果:
ランダムな時間の後、アプリは理由もなく終了します。
期待される結果:
動作方法
これはApple Engineer:によって確認されます
CLLocationManagerの更新がフォアグラウンドで開始され、バックグラウンドで実行するためにすべての作業を行ったら、ロケーションの更新はバックグラウンドで次のようになるまで無限に実行されるはずです。
更新された回答:
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であり、このスレッドの更新を維持しようとします。
アプリが動作を変更せずにバックグラウンドになったときに、/ tmpおよび/ Library/Cachesディレクトリを消去しようとしました。また、アプリがバックグラウンドロケーションを変更せずに処理するときにも、同じことを定期的に試しました。