MKMapView无法加载具有HTTP 410错误的切片

时间:2016-02-05 14:26:59

标签: ios macos mkmapview mapkit

我对MKMapView有疑问。当我放大地图时,地图无法加载图块。

-(void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error 

错误:

  

Domain = GEOErrorDomain Code = -204“(null)”UserInfo = {SimpleTileRequesterUnderlyingErrors =(   “错误域= GEOErrorDomain代码= -204 \”(null)\“   的UserInfo = {的HTTPStatus = 410,   NSErrorFailingURLStringKey = http://gspe19.ls.apple.com/tile.vf?flags=1&style=20&size=2&scale=0&v=11037825&z=15&x=6205&y=12336&sid=0246704635757302674107153038443966765357&accessKey=1454685602_q3bVUYvHBdxsSo0A_j0fK7EyQ9b21NPShV7GRLzr4WFkkhxB4vO7%2BlXcGsXJ4zZHvhTaLVWsyPa3PlU60cDrmrFwmwCYBGrLA9mChV%2FHoRHoTU9AGI72VQP9UKZW%2B0GKqfRhpcw4xr%2F%2FTTVgJZ7wU4U4KnA8K2rVVQ%2FOfFHJq7OO4nYecTvy0ur4I9D3Sxf%2Btn9DcXU8agDRJignB}“,...

修改 似乎它以某种方式与缓存有关,但我不确定。在地图应用程序中加载相同的地图区域后,此问题会消失一段时间。

提前致谢

2 个答案:

答案 0 :(得分:13)

我在Apple开发者论坛上分析并描述了这个问题:https://forums.developer.apple.com/thread/43077

iOS上的MapKit存在问题 - 地图有时无法加载,另一次部分加载,显示无法加载的图块的纯网格。即使在Apple Maps应用程序中,每个使用MapKit的应用程序都会在系统范围内出现问题。 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的执行,执行了一个私有的GeoService框架方法,似乎强制geo_manifest更新:

(lldb) po [[GEOResourceManifestManager sharedManager] forceUpdate]  

恢复执行后,geo_manifest更新请求出现在网络流量中。打开地图视图后,出现成功的切片响应并且地图已完全加载。看起来com.apple.geod守护程序本身无法不时地查询新的geo_manifest。因为问题是如此短暂,所以无法在设备控制台日志中找到任何com.apple.geod错误。

出现以下问题:为什么当tile请求导致410响应时,com.apple.geod,GeoServices或MapKit不会尝试查询新的geo_manifest?这是一个已知问题吗? Apple计划在未来的iOS版本中修复此问题吗?

修改 在iOS 10中修复(https://openradar.appspot.com/radar?id=6075032430182400)。

答案 1 :(得分:4)

我的基于Mac OS X MKMapView的应用程序在放大时也未能加载图块。过去几周它一直在恶化。我还没有记录mapViewDidFailLoadingMap:错误,但我刚刚开始这样做。

要检查它不是我的代码,我在XCode中从头开始创建一个完全空的Mac OS X测试应用程序。这使用接口构建器将单个MKMapView放置在单个窗口中。应用程序中的代码都没有由我编写。此测试应用程序也表现出问题。

虽然MKMapView在显示图块时遇到问题,但 Maps.app 应用程序正在完美地显示图块。所以它不是我的网络连接。

我在笔记本电脑上运行,我怀疑自计算机完全重启以来时间越长,问题就越严重。例如。我通常只是关上盖子,电脑在晚上睡觉。昨晚完全重启修复了问题,并且当前正在正确加载磁贴。

进一步的信息:

  • 我的应用程序的最低部署目标是Mac OS X 10.11
  • 测试正在OS X El Capitan 10.11.3上运行
  • 地图处于混合模式。
  • 重新启动应用程序并不能解决问题。
  • 地点:英国
  • 谷歌的DNS和我的ISP的DNS都会出现问题。

如果问题再次出现,我将提交错误报告。

更新(2016年2月6日):已向developer.apple.com提交了一份错误报告,详细说明了我所看到的内容。建议遇到问题的其他人也向苹果提交错误报告,并提供您拥有的任何数据。因为这对他们来说很难再现。

更新(2016年2月7日):昨晚睡过笔记本电脑后问题又重新出现了。现在我正在记录mapViewDidFailLoadingMap:条消息,我发现这样的错误:

  

错误域= GEOErrorDomain代码= -204&#34;(null)&#34;的UserInfo = {SimpleTileRequesterUnderlyingErrors =(   &#34;错误域= GEOErrorDomain代码= -204 \&#34;(null)\&#34; UserInfo = {HTTPStatus = 410,NSErrorFailingURLStringKey = http://gspe19.ls.apple.com/tile.vf?flags=1&style=20&size=2&scale=0&v=...&z=...&x=...&y=...&sid=...&accessKey= ...}&#34;,   ...

使用新信息更新了developer.apple.com错误报告。

更新(2016年4月5日): OS X 10.11.4上仍然存在问题。 Apple刚刚将我的错误报告标记为另一个错误报告的副本。

更新(2016年5月20日): OS X 10.11.5中仍然存在问题。

更新(2016年7月23日): OS X 10.11.6中仍然存在问题。已经更新了我的developer.apple.com错误报告,其中包含该问题仍然存在的信息。

更新(2016年1月3日):到目前为止,我还没有看到macOS 10.12(Sierra)中出现此问题。但是,我已经看到我同时打开的所有地图视图都刷新了它们的图块。因此,我怀疑可能正在检测到该问题,并且清除了磁贴缓存。