【发布时间】:2019-03-12 20:16:50
【问题描述】:
我有一个信标测距应用程序,该应用程序以前在前台和后台都可以长时间(几天)正常工作。现在,即使在前景中,它也会突然停止显示任何信标。通常,它可以正常工作 18 到 20 分钟,然后停止并显示我的信标范围为 0 RSSI(使用 xcode 日志窗口中的调试消息查看),即使信标只有几英尺远并且之前注册了 RSSI 值-60。几秒钟后,它将继续每秒触发 didRangeBeacons 事件,但信标数组为空。
我看到另一个线程 here 关于 iOS 12.1 有一个错误导致测距在后台停止并且 12.2 beta 2 有一个修复,所以我将用于测试的 iPad 从 12.1 更新到 12.2 beta 4 但是还是有这个问题。
当设备进入此状态时,我可以停止应用程序并重新运行它,它会再次运行大约 20 分钟:
或
当我的应用程序仍在运行并在 xCode 中观看我的消息时,我可以切换到 iPad 上的设置屏幕。打开设置屏幕后,我可以立即看到调试消息再次开始显示信标。我可以切换回我的应用,它会继续工作大约 20 分钟,然后再次失败。
我确实将 CLLocationManager pausesLocationUpdatesAutomatically 设置为 false。
这听起来像是蓝牙正在关闭,但它非常令人困惑。
更新:
我发现如果屏幕关闭/锁定,该应用程序将继续在后台运行数小时。它仅在屏幕处于打开状态时才会停止工作,无论是前台还是后台。
我已尝试重置测试 iPad 并重置网络设置和位置权限,但观察到的性能没有变化。
这看起来与 Apple 首次发布 iOS 10 并破坏信标测距时发生的情况相同。
更新 2:
检查以下 CLLocationManager 事件,当测距停止时,它们都没有被触发:
didFailWithError
测距信标DidFailForRegion
locationManagerDidPauseLocationUpdates
didExitRegion
didChangeAuthorizationStatus
此外,在循环中运行 gpx 文件以模拟位置更改不会改变观察到的错误。
【问题讨论】:
标签: objective-c xcode bluetooth