我分析和描述对苹果开发者论坛的问题:https://forums.developer.apple.com/thread/43077
有一个与iOS上MapKit一个问题 - 地图有时无法加载,加载部分,对于瓷砖显示纯网格中的另一个时间未能加载。在使用MapKit的每个应用程序中,即使在Apple地图应用程序中,系统范围内也会出现问题。在iPhone(6+)和iPad(iPad Air,iPad Air 2,iPad Mini)和一系列iOS版本(9.0,9.0.2,9.2.1)上都会出现问题。此外,当地图变焦高时,它似乎更经常发生。这个问题很难再现,因为它看起来是随机发生的,在受影响的设备上坚持一段时间并突然消失。
我设法分析网络流量,发现这种奇怪行为的可能原因。缺少瓦片相关联的网络请求失败,HTTP状态码410和空内容:
GET http://gspe19.ls.apple.com/tile.vf?flags=1&style=13&size=2&scale=0&v=11040322&z=15&x=17923&y=10756&sid=SOME_SID_1&accessKey=SOME_ACCESS_KEY_1 <- 410
GET http://gspe19.ls.apple.com/tile.vf?flags=1&style=20&size=2&scale=0&v=11040322&z=15&x=17923&y=10756&sid=SOME_SID_1&accessKey=SOME_ACCESS_KEY_1 <- 410
...
“V”的参数似乎是一个地图版本号并随时间增长。它看起来版本号可以在“geo_manifest”网络呼叫,从现象时有发生后更改:
GET https://gspe35-ssl.ls.apple.com/geo_manifest/dynamic/config?application=geod&application_version=1&country_code=PL&hardware=iPad4,2&os=ios&os_build=13C75&os_version=9.2
下载新geo_manifest后,版本号生效再次和每瓦请求,HTTP状态成功结束代码200:
GET http://gspe19.ls.apple.com/tile.vf?flags=1&style=13&size=2&scale=0&v=11040529&z=15&x=17923&y=10756&sid=SOME_SID_2&accessKey=SOME_ACCESS_KEY_2 <- 200
GET http://gspe19.ls.apple.com/tile.vf?flags=1&style=20&size=2&scale=0&v=11040529&z=15&x=17923&y=10756&sid=SOME_SID_2&accessKey=SOME_ACCESS_KEY_2 <- 200
...
我用一个lldb来确认,陈旧的geo_manifest是410响应的原因。我在使用Xcode显示症状的设备上运行任意应用程序。 MKMapView中有一些图块丢失,并且410个响应出现在网络流量中。我关上了地图,用LLDB暂停执行,执行,似乎迫使geo_manifest更新私人GeoService框架方法:
(lldb) po [[GEOResourceManifestManager sharedManager] forceUpdate]
恢复执行后,geo_manifest更新请求出现在网络流量。打开地图视图后,出现成功的平铺响应并且地图完全加载。看起来像com.apple.geod守护进程本身无法不时地查询新的geo_manifest。由于问题非常短暂,因此无法在设备控制台日志中找到任何com.apple.geod错误。
出现下列问题:为什么com.apple.geod,地质服务或MapKit不尝试查询新geo_manifest瓦时请求引起410回应?这是一个已知的问题吗?苹果计划在未来的iOS版本中解决这个问题吗?
编辑: 在iOS 10(https://openradar.appspot.com/radar?id=6075032430182400)中已修复。
这种情况经常发生在旧的测试设备上。 '强制更新'解决了它。 –