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

iOS 12 terminates apps in the background for no reason

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

之前工作正常

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

演示应用程序仅启动 CLLocationManager 并将此 运行ning 保留在后台。当 运行 在后台运行时,我们通过记录它来跟踪它。问题是应用程序被 iOS 终止。创建演示应用程序是为了演示此问题。

重现步骤

  1. 运行 设备上的应用
  2. 位置管理器的高级访问权限
  3. 将应用置于后台
  4. 等待 1-48 小时

结果:

  1. 应用已终止

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

预期结果:

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

它应该如何工作

苹果工程师证实了这一点:

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

更新的答案:

Apple 在 iOS 12.2 beta 2 (16E5191d)

中修复了这个错误

原始分析和错误检测:

我们与 Apple 开发人员技术支持一起分析了 Sysdiagnose 文件的这个问题。按照这些 guidelines,您可以安装配置文件以在您的设备上进行更多日志记录。我不确切知道这些日志是如何工作的以及在哪里可以找到这个问题,但 Apple 为我做了这个并附带了第一次分析:

On the suspension event you observed on 2018/10/22 01:01:12:587, this is what I see (about a minute after your last activity logging)

[CllocationManag:2725] Terminating with description: { owner = ; target = rw.sp.flitsmeister.frameworks.CllocationManagerBackgroundTest; }

This is basically saing that your app was terminated, because the system needed drive space, and killed a bunch of apps so it can delete their /tmp and /Library/Caches directories. I have seen this process to be a little more aggressive in iOS 12, but seeing you are on a 256GB device, and have ~179 GB free after the cleanup, I am finding it hard to believe this was justified.

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

Unfortunately I don’t bring good news.

It turned out that, currently in iOS 12 there is a new mechanism that will terminate long running background apps periodically as the system needs to free resources. At this time, this process is a bit too aggressive, and I am working with the relevant teams to get this to behave better.

So, at this point, I would like you to file a bug report. Explain the symptoms. And make sure you upload the sysdiagnose files along with the bug report. (I already sent yours in, but it doesn’t hurt to have the new ones as well). And let me know the bug number please.

所以这意味着目前在 iOS 12 中,您的应用程序不会 运行 在后台无休止。我已经填写了一个错误报告,号码是 45581276 并且会尽量保持这个线程更新。

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