iOS 12无缘无故在后台终止应用程序

时间:2018-10-26 09:04:03

标签: ios cllocationmanager ios12 ios-background-mode

从iOS 12开始,CLLocationManager在后台不再无休止地运行。该应用程序被终止,没有崩溃日志,随机发生。在iOS 12之前,此功能运行良好。

为演示此问题,我创建了一个示例应用here

该演示应用程序仅启动一个CLLocationManager并使其在后台运行。在后台运行时,我们通过记录日志来跟踪它。问题是该应用程序被iOS终止。创建了演示应用程序来演示此问题。

复制步骤

  1. 在设备上运行应用程序
  2. 对locationmanager的全面访问
  3. 将应用程序置于后台
  4. 等待1-48小时

结果:

  1. 该应用已终止

应用在随机时间后无故终止。

预期结果:

  1. 该应用程序仍在运行。

应如何工作

这已得到Apple工程师的确认:

一旦CLLocationManager更新在前台启动,并且您已完成所有工作以使其在后台运行,则位置更新应在后台无休止地运行,直到:

  • 应用被强制退出
  • 设备已重启
  • 应用程序停止位置更新
  • 应用程序释放CLLocationManager对象
  • 应用崩溃
  • iOS由于内存不足而终止了该应用程序,
  • locationManager对象被释放,过度释放或覆盖。您应该确保未实例化视图控制器,这将重置locationController类。如果在后台运行该应用程序时发生这种情况,您将重新启动更新,这将导致该应用程序最终被暂停。您应该确保locationController是单例。
  • 应用崩溃。检查要测试的设备上是否有崩溃日志
  • 由于内存不足,iOS正在终止该应用程序。在这种情况下,您会在显示您的应用被终止的设备上找到JetsamEvent日志。您可以检查时间戳记,并找到与应用程序停止工作有关的时间戳记。

2 个答案:

答案 0 :(得分:23)

更新后的答案:

Apple修复了iOS 12.2 beta 2(16E5191d)中的此错误

原始分析和错误检测:

我们与Apple开发人员技术支持一起使用Sysdiagnose文件分析了此问题。完成这些guidelines之后,您可以安装配置文件以在设备上进行更多日志记录。我不知道这些日志的工作方式以及在哪里可以找到此问题,但是Apple为我完成了此任务,并进行了首次分析:

  

关于您在2018/10/22 01:01:12:587观察到的暂停事件,   是我看到的(在您上次活动记录后约一分钟)

     

[CllocationManag:2725]终止于描述:    {       所有者=;       target = rw.sp.flitsmeister.frameworks.CllocationManagerBackgroundTest; }

     

这基本上是在说您的应用已终止,因为   系统需要驱动器空间,并杀死了许多应用程序,因此可以删除   他们的/ tmp和/ Library / Caches目录。我看过这个过程   在iOS 12中更具侵略性,但看到您在   256GB设备,清理后有约179 GB可用空间,我正在寻找它   很难相信这是合理的。

在发送了更多的系统诊断和复制案例后,Apple竭尽全力进行分析,并得出以下结论:

  

不幸的是,我没有带来好消息。

     

事实证明,当前在iOS 12中存在一种新机制   将定期终止长时间运行的后台应用程序,因为系统   需要释放资源。这时候这个过程也有点   积极进取,我正在与相关团队合作,以实现这一目标   表现得更好。

     

因此,在这一点上,我希望您提交一个错误报告。解释   症状。并确保您将sysdiagnose文件与   错误报告。 (我已经将您的邮件寄出,但是   以及新的)。并且让我知道错误号。

因此,这意味着当前在iOS 12中,您的应用不会在后台无限运行。我已经填写了一个错误报告,编号为45581276,将尝试保持此线程更新。

答案 1 :(得分:3)

我尝试在应用程序在后台运行时清除/ tmp和/ Library / Caches目录,而没有任何行为更改。当应用程序处理背景位置时也没有进行任何更改,我也定期尝试了同样的操作。