【问题标题】:iOS App running on iOS 13 is resetting each time the user goes into background for at least 30sec每次用户进入后台至少 30 秒时,在 iOS 13 上运行的 iOS 应用都会重置
【发布时间】:2019-10-31 07:52:52
【问题描述】:

这不是一个真正的问题,但我想把它写在这里,以便其他面临问题的人可以找到解决方案。

自从iOS 13 发布以来,我们的一些用户一直在联系我们,告诉我们每次他们进入后台一段时间(大约 30 秒)时,我们的应用都会重置。

当然,绝对不知道行为的线索,Crashlytics 等上什么都没有。我们能够在 QA 设备上重现,但无法在连接了调试器的设备上重现。

显然,我们使用Console 来监控正在发生的事情,我们注意到大约在 10 分钟后发送了一条奇怪的消息。我们的应用进入后台 25 秒后:

default 10:14:01.658579+0100    XXX RunningBoardServices    Received process assertions expiration warning!
default 10:14:01.659214+0100    XXX RunningBoardServices    Notifying client of imminent expiration of assertion
default 10:14:01.659568+0100    XXX RunningBoardServices    Expiration notification complete

如果您以足够快的速度重新启动应用程序,一切正常,但如果您让应用程序再不活动 5 秒(大约)然后重新启动它,则应用程序正在重置( appDidFinishLaunching...)。

...

【问题讨论】:

  • 我也遇到了同样的问题,我试着解决这个问题。

标签: ios firebase background reset ios13


【解决方案1】:

...

我们越挖越深,没有找到任何东西……直到我们决定通过Cocoapods 更新我们的一些外部库,你猜怎么着?我们找到了我们的罪人:来自Firebase 套件的GoogleDataTransport!

我们使用1.1.3 版本并更新到3.0.1 解决了这个问题。我猜他们在后台做了一些“坏”的事情......

就是这样,伙计们。我希望它会帮助其他人!

干杯。

编辑: 从此页面(Firebase 发行说明)https://firebase.google.com/support/release-notes/ios#6.11.0,您可以阅读:

修复了在应用处于后台时阻止上传完成的竞争条件。 版本 6.10.0 - 2019 年 10 月 8 日

据我了解,Firebase 可能没有通知 iOS 他们在后台进行的上传已完成。它可以解释为什么 iOS 13 在这种情况下会杀死一个应用程序。

?‍♂️

编辑 2: Apple 显然发布了 iOS 更新 (13.2.2),旨在解决这些背景问题:https://twitter.com/engadget/status/1192512171252551682?s=12。

修复了可能导致应用在后台运行时意外退出的问题

我们使用不包含我们之前修复的旧应用程序对其进行了测试,不幸的是问题仍然存在......

【讨论】:

    【解决方案2】:

    崩溃是由于后台任务泄漏造成的。在我的应用程序中,一些 SDK 没有正确使用后台任务。因为被看门狗杀死了,所以不会出现调试,调试时可以打印beginBackgroundTask和endBackgroundTask。如果不匹配,就会发生泄漏。

    我写了一个类来hook后台任务相关的方法,避免泄露被看门狗杀死:https://github.com/ruanjx/MPIBackgroundTaskProtection

    更多后台任务信息:https://medium.com/swlh/handling-background-tasks-in-ios-13-67f717d94b3d

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 1970-01-01
      • 2018-09-10
      • 2018-03-21
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多