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

Sjo*_*ors 23 cllocationmanager ios ios-background-mode ios12

从iOS 12开始,CLLocationManager不再在后台运行.应用程序在随机时间没有崩溃日志的情况下终止.这在iOS 12之前运行良好.

为了演示这个问题,我在这里创建了一个示例应用程序

演示应用程序只是启动CLLocationManager并在后台运行它.在后台运行时,我们通过记录它来跟踪它.问题是应用程序被iOS终止.创建演示应用程序以演示此问题.

重现步骤

  1. 在设备上运行应用程序
  2. 很高兴访问位置管理员
  3. 将应用程序放到后台
  4. 等待1-48小时

结果:

  1. 该应用程序已终止

随机时间后应用程序无任何理由终止.

预期结果:

  1. 该应用仍在运行.

它应该如何工作

这是Apple工程师证实的:

一旦CLLocationManager更新在前台启动并且您完成了让它在后台运行的所有工作,位置更新应该在后台运行,直到:

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

Sjo*_*ors 27

更新的答案:

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

原始分析和错误检测:

我们与Apple Developer技术支持部门一起使用Sysdiagnose文件分析了这个问题.遵循这些准则,您可以安装配置文件以在设备上进行更多日志记录.我不确切知道这些日志是如何工作的以及在哪里可以找到这个问题,但是Apple为我做了这个并且第一次分析了:

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

[CllocationManag:2725]以描述终止:{owner =; target = rw.sp.flitsmeister.frameworks.CllocationManagerBackgroundTest; }

这基本上是你的应用程序被终止,因为系统需要驱动器空间,并杀死了一堆应用程序,因此它可以删除他们的/ tmp和/ Library/Caches目录.我已经看到这个过程在iOS 12中更具攻击性,但看到你使用的是256GB设备,并且在清理后有大约179 GB的空闲时间,我发现很难相信这是合理的.

在发送了更多的sysdiagnose和复制案例之后,Apple尽力分析并以下列结论结束:

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

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

所以,在这一点上,我希望你提交一份错误报告.解释症状.并确保上传sysdiagnose文件以及错误报告.(我已经把你送进了,但是新的也没有受伤).请告诉我错误号码.

所以这意味着目前在iOS 12中你的应用程序不会在后台无限运行.我填写了一个错误报告,数字是45581276,并将尝试保持此线程更新.

  • 我在背景中长期应用中遇到类似的问题.Apple的任何更新? (3认同)
  • 刚在开放式雷达上添加了这个 (3认同)
  • 所以最后我发现了这个.我有这个问题,因为ios 12 beta.我认为这将在发布时解决.无论如何,我会继续在这里查看它,因为你的bug似乎不在openradar上. (2认同)
  • 此IOS12行为更改已有效地破坏了我的应用程序.Android在大约一年前引入Android P时做了类似的事情,但直到IOS 12,我的应用程序几乎永远在后台运行,现在却没有.我不知道该怎么做.是否可以查看Apple Bug报告的进度? (2认同)