speed - location permission ios 11




Testare CoreLocation su iPhone Simulator (6)

AGGIORNAMENTO: A partire da iOS 5 e Xcode 4.1 è ora possibile testare la posizione nel simulatore e persino definire i percorsi. Vedi http://developer.apple.com per maggiori dettagli.

Domanda legacy

Esiste comunque la possibilità di testare CoreLocation su iPhone Simulator?

Tutto quello di cui ho bisogno è di essere in grado di impostare da solo la posizione e farla restituire da CoreLocation.


Attivare i callback di Core Location da una classe di test, se è necessario impostare una posizione diversa da quella fornita dal simulatore.


Ecco il mio semplice hack che costringe CLLocationMager a restituire i geocoords della Tech Bookstore di Powell solo sul simulatore:

#ifdef TARGET_IPHONE_SIMULATOR 

@interface CLLocationManager (Simulator)
@end

@implementation CLLocationManager (Simulator)

-(void)startUpdatingLocation {
    CLLocation *powellsTech = [[[CLLocation alloc] initWithLatitude:45.523450 longitude:-122.678897] autorelease];
    [self.delegate locationManager:self
               didUpdateToLocation:powellsTech
                      fromLocation:powellsTech];    
}

@end

#endif // TARGET_IPHONE_SIMULATOR

Penso che ci sia un altro approccio (meglio IMHO) qui rispetto alla sottoclasse di CLLocationManager come in

http://code.google.com/p/dlocation/

In ObjectiveC sembra possibile sostituire un metodo esistente da una classe senza sovrascriverlo. Questo è spesso chiamato "metodo swizzling": si definisce la propria categoria per una classe esistente e si implementa un metodo esistente.

Dal punto di vista del cliente, tutto è trasparente: ha la sensazione di avere a che fare con il CLLocationManager reale, ma in realtà "hai preso il controllo da esso" . In modo che non debba occuparsi di sottoclassi speciali o di alcun protocollo di delega speciale: continua a utilizzare la stessa classe / protocollo di quella di CoreLocation.

Ecco un esempio per prendere il controllo del delegato che un cliente potrebbe iniettare:

@implementation CLLocationManager (simulator) 

@implementation CLLocationManager (simulator)

- (void) setDelegate: (id) delegate { // la tua implementazione di setDelegate ... } - (id) delegate { // la tua implementazione del delegato .... } - (void) startUpdatingLocation { } - (void) stopUpdatingLocation { } // .... // stesso per il resto di qualsiasi metodo disponibile nello standard CLLocationManager @fine

Quindi, in questa implementazione, sei libero di gestire un insieme predefinito di coordinate (provenienti da un file di qualsiasi tipo) che verranno "trasferite" al delegato utilizzando il protocollo CLLocationManagerDelegate standard.


Se sei interessato ad aggiornare il punto blu UserLocation in un MKMapView con gli aggiornamenti di posizione simulati, controlla il mio FTLocationSimulator su http://github.com/futuretap/FTLocationSimulator

Legge un file KML generato da Google Earth per fornire aggiornamenti di posizione continui.


il locationManager: didUpdateToLocation e locationManager: didFailedWithError i callback con overload non vengono mai chiamati nel simulatore iphone, è piuttosto strano, tutto ciò che ottengo è 0.0000 per lat. e 0.0000 per lon. come la posizione. Nella situazione in cui sviluppi qualcosa, è piuttosto difficile implementare tutte le possibili situazioni che possono verificarsi durante la gestione della posizione, utilizzando solo l'ambiente del simulatore.


Testare CoreLocation su iPhone Simulator

1) Per testare la posizione nel simulatore, il modo migliore è usare i file GPX, basta andare su File -> Nuovo -> Risorsa -> File GPX.

2) Dopo aver aggiunto il file GPX, aggiornare le coordinate della posizione come desiderato.

3) una volta aggiunto il file GPX al progetto, selezionare Schema -> Modifica schema -> Esegui -> Consenti simulazione posizione. Attiva la simulazione della posizione e seleziona il nome del file GPX appena creato.

in questo modo il simulatore sceglierà sempre le coordinate desiderate, che abbiamo aggiunto nel nostro file GPX.





core-location