2016-02-05 23 views
12

Ho un problema con MKMapView. Mappa non riesce a caricare le piastrelle quando ho ingrandita inMKMapView non riesce a caricare i pannelli con errore HTTP 410

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

Errore:.

Domain=GEOErrorDomain Code=-204 "(null)" UserInfo={SimpleTileRequesterUnderlyingErrors=( "Error Domain=GEOErrorDomain Code=-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 }", ...

EDIT: sembra che è legato per memorizzare nella cache in qualche modo, ma non sono sicuro. Questo problema scompare per qualche tempo dopo aver caricato la stessa area della mappa nell'applicazione Maps.

Grazie in anticipo

risposta

4

mio Mac OS X MKMapView based è stato anche riuscendo a caricare le piastrelle utilizzando lo zoom in. E 'andata peggiorando nel corso delle ultime settimane. Non ho registrato gli errori mapViewDidFailLoadingMap:, ma ho appena iniziato a farlo.

Per verificare che non sia il mio codice, ho creato un'app di test Mac OS X completamente vuota da zero in XCode. Questo ha un singolo MKMapView posizionato in una singola finestra usando il generatore di interfacce. Nessun codice nell'applicazione è stato scritto da me. Questa applicazione di test presenta anche il problema.

Mentre il MKMapView ha problemi a visualizzare i riquadri, l'applicazione Maps.app sta visualizzando perfettamente le tessere. Quindi non è la mia connessione internet.

Sono in esecuzione su un laptop e ho il sospetto che il problema peggiori, più tempo è trascorso dal momento in cui il computer è stato riavviato completamente. Per esempio. Normalmente chiudo il coperchio e il computer dorme di notte. Il riavvio completo della scorsa notte ha risolto il problema e le tessere sono attualmente caricate correttamente.

Alcuni ulteriori informazioni:

  • L'obiettivo minimo impiego di mia domanda è Mac OS X 10.11
  • I test sono in esecuzione su OS X El Capitan 10.11.3
  • La mappa è in ibrida modalità.
  • Il riavvio dell'applicazione non risolve il problema.
  • Ubicazione: UK
  • Il problema si verifica sia con il DNS di google sia con il DNS del mio ISP.

Se il problema si ripresenta, invierò una segnalazione di errore.

Aggiornamento (6 febbraio 2016): Sono state inviate segnalazioni di bug a developer.apple.com che descrivono ciò che sto vedendo. Raccomando a chiunque altro di provare il problema di inviare una segnalazione di bug a Apple con qualsiasi dato tu disponga. Perché potrebbe essere abbastanza difficile per loro riprodursi.

Aggiornamento (7 febbraio 2016): Dopo aver dormito il portatile la scorsa notte il problema si è ripresentato. Ora che sto accedendo mapViewDidFailLoadingMap: messaggi, sto vedendo gli errori come questo:

Error Domain=GEOErrorDomain Code=-204 "(null)" UserInfo={SimpleTileRequesterUnderlyingErrors=( "Error Domain=GEOErrorDomain Code=-204 \"(null)\" 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= ...}", ...

hanno aggiornato il developer.apple.com bug report con le nuove informazioni.

Aggiornamento (5 aprile 2016): Il problema è ancora presente su OS X 10.11.4. Apple ha appena contrassegnato il mio rapporto sui bug come duplicato di un altro bug report.

Aggiornamento (20 maggio 2016): Il problema è ancora presente in OS X 10.11.5.

Aggiornamento (23 luglio 2016): Il problema è ancora presente in OS X 10.11.6. Ho aggiornato il mio bug report su developer.apple.com con informazioni che il problema è ancora presente.

Aggiornamento (3 gennaio 2016): Finora non ho visto il problema che si verifica in macOS 10.12 (Sierra). Tuttavia, ho visto tutte le viste della mappa che avevo aperto contemporaneamente aggiornare i loro riquadri. Pertanto, sospetto che il problema possa essere rilevato e che le cache delle tile vengano eliminate.

12

ho analizzato e descritto il problema sul forum degli sviluppatori di Apple: https://forums.developer.apple.com/thread/43077


C'è un problema con MapKit su iOS - carta a volte non riesce a caricare, un'altra volta che carica in parte, la visualizzazione della griglia sotto gli occhi di una piastrella che non è stato caricato. Il problema si verifica a livello di sistema in ogni app che utilizza MapKit, anche nell'app Apple Maps. Il problema si verifica su entrambi gli iPhone (6+) e iPad (iPad Air, iPad Air 2, iPad Mini) e una gamma di versioni iOS (9.0, 9.0.2, 9.2.1). Inoltre sembra che accada più spesso quando lo zoom della mappa è alto. Il problema è molto difficile da riprodurre, perché sembra accadere casualmente, persiste sul dispositivo interessato per un po 'di tempo e improvvisamente scompare.

Sono riuscito ad analizzare il traffico di rete e ho trovato la ragione possibile di questo strano comportamento. richieste di rete associate con piastrelle mancanti non riescono con codice di stato HTTP 410 e contenuto vuoto:

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 
... 

parametro 'v' sembra essere una mappa numero di versione e crescere con il tempo. Sembra che il numero di versione può cambiare dopo un 'geo_manifest' chiamata di rete, cosa che accade di tanto in tanto:

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 

Dopo aver scaricato nuova geo_manifest, numero di versione diventa valido ancora una volta e ogni richiesta di piastrelle si conclude con successo con stato HTTP codice 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 
... 

ho usato un lldb per confermare che un geo_manifest stantio è la ragione di 410 risposte. Ho eseguito un'app arbitraria sul dispositivo che mostrava i sintomi usando Xcode. Alcune tessere mancavano su un MKMapView e 410 risposte apparivano nel traffico di rete. Ho chiuso la mappa, fermai l'esecuzione con lldb, eseguito un metodo quadro GEOSERVICE privato che sembrava forzare geo_manifest aggiornamento:

(lldb) po [[GEOResourceManifestManager sharedManager] forceUpdate] 

Dopo riprendere l'esecuzione, geo_manifest richiesta di aggiornamento è apparso nel traffico di rete. Dopo aver aperto la vista mappa, sono state visualizzate le risposte dei riquadri con successo e la mappa è stata caricata completamente. Sembra che il daemon com.apple.geod non riesca a eseguire query di nuovo geo_manifest di volta in volta. Poiché il problema è così effimero, non è stato possibile trovare alcun errore com.apple.geod nei registri della console del dispositivo.

Le seguenti domande sorgono: perché com.apple.geod, GeoServices o MapKit non provano a eseguire una query per nuovo geo_manifest quando la richiesta di tile restituisce 410 risposte? È un problema noto?Apple prevede di risolvere questo problema in future versioni di iOS?

EDIT: fissato in iOS 10 (https://openradar.appspot.com/radar?id=6075032430182400).

+1

Questo succede spesso con i dispositivi di test più vecchi. 'force update' lo ha risolto. –