一旦 iOS 设备获得 GPS 定位,它将将该坐标缓存相当长的一段时间,并在您向 CLLocationManager 发送 startUpdatingLocation 消息后立即返回该坐标。
这使得在较差的 GPS 条件下无法以远程可重现的方式测试 GPS 相关代码的行为。特别是,手机无法获取修复且从不调用 locationManager:didUpdateToLocation:fromLocation: 的场景根本无法测试。
关闭设备电源不会清除 GPS 缓存。
如何清除 GPS 缓存,从而在真实情况下为真实用户重复测试我的应用程序在较差的 GPS 场景下的行为?
GPS 缓存可以在这里找到:/var/root/Library/Caches/locationd 您可以使用 iPhone Explorer 或 DiskAid for Mac 访问并删除该文件夹。
关于验证 GPS 数据的更大问题,您可能需要阅读检测不良核心位置数据。他提供了一种辅助方法来验证位置数据。祝你好运,希望这能帮到你。
这让我深入研究如何停止/启动定位服务本身
如果您禁用 iPhone 上的位置服务(设置 -> 隐私和安全)然后重新启用它们,它将清除“/private/var/root/Library/Caches/locationd”处的缓存。然而,在我的 iOS (16.7.5) 上,这会导致指南针在打开时冻结,并且谷歌地图无法检测到我的位置,非常奇怪。我有iOS文件的备份,所以我测试了导致此问题的原因,结果发现如果清空以下文件夹就会出现问题:
/private/var/root/Library/Caches/locationd/tiles_cell/coarse-lte
如果我恢复该文件夹内的文件,它会解决此问题,并且指南针/谷歌地图应用程序将正常运行。看来只有我有这个问题了
您实际上不必停止定位服务。您可以简单地杀死可执行文件:
killall locationd
只要不请求定位服务,可执行文件就不会重新启动