【问题标题】:iOS 12 terminates apps in the background for no reasoniOS 12 无故终止后台应用
【发布时间】:2019-03-31 00:06:35
【问题描述】:

从 iOS 12 开始,CLLocationManager 不再在后台无休止地运行。该应用程序会在随机时间终止而没有崩溃日志。这在 iOS 12 之前运行良好。

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

演示应用程序只是启动一个 CLLocationManager 并让它在后台运行。在后台运行时,我们通过记录它来跟踪它。问题是该应用程序被iOS终止。创建演示应用程序就是为了演示这个问题。

复制步骤

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

结果:

  1. 应用程序已终止

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

预期结果:

  1. 应用仍在运行。

应该如何工作

Apple 工程师证实了这一点:

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

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

【问题讨论】:

    标签: ios cllocationmanager ios12 ios-background-mode


    【解决方案1】:

    更新答案:

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

    原始分析和错误检测:

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

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

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

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

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

    很遗憾,我没有带来好消息。

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

    所以,此时,我希望您提交一份错误报告。解释 症状。并确保您上传 sysdiagnose 文件以及 错误报告。 (我已经发送了你的,但有没有坏处 新的也是如此)。请告诉我错误编号。

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

    【讨论】:

    • 我在后台长期运行应用程序时遇到了类似的问题。 Apple 有什么更新吗?
    • 所以最后我在 SO 上找到了这个。我从 ios 12 beta 开始就有这个问题。我认为这将在发布时解决。无论如何,我会继续在这里寻找它,因为您的错误似乎不在 openradar 上。
    • 刚刚在开放式雷达上也添加了这个
    • 这个 IOS12 行为改变已经有效地破坏了我的应用程序。 Android 在大约一年前推出 Android P 时做了类似的事情,但在 IOS 12 之前,我的应用程序几乎可以永远在后台运行,现在不行了。我不知道该怎么做。是否可以查看 Apple Bug Reports 的进度?
    • 我能看到的唯一解决方法是让应用程序在前台运行并禁用锁定屏幕。从而大大增加电池消耗。当然,对于大多数应用来说,这可能不是一个可行的选择。
    【解决方案2】:

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

    【讨论】:

    • 最好的办法是通过提交问题联系开发人员技术支持。可以做出改变的决策者似乎没有根据我收到的信息采取任何行动。给他们留下深刻印象,这会对您的用户产生负面影响,您需要回滚 iOS 12 中的更改。
    • 我不明白你在@Scott 在这里发布什么?这实际上是我做对了吗?
    • 对不起,Sjoerd,你做对了。我看到其他一些人向 Apple 的 Bug Reporter 提交了一个错误。我猜你和我正在与同一个支持工程师联系。这个问题对我来说是一场噩梦。
    • 大家好,我也有同样的问题。如果 Apple 有任何更新,请随时通知我们。
    • 这已在 12.2 beta 2 中修复
    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 2015-04-11
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多