Pergunta

UPDATE: a partir de iOS 5 e Xcode 4.1 é agora é possível local de teste no simulador e até mesmo definir rotas. Consulte http://developer.apple.com para mais detalhes.

Legado Pergunta

Existe uma maneira de CoreLocation teste no iPhone Simulator?

Tudo o que necessita é de ser capaz de definir o local de mim e tem CoreLocation devolvê-lo.

Foi útil?

Solução 2

Obrigado pela grande gabarito, ele levou-me a encontrar uma solução robusta.

Todo o código pode ser encontrada aqui:

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

É muito confuso, mas como eu usá-lo ele vai ser tornar-se muito melhor.

A solução foi CLLocationManager subclasse e definir um novo @protocol delegado, chamado DLocationManagerDelegate.

Ele é projetado para ser um simples substituto para CLLocationManagerDelegate que compila para baixo a um muito camada fina quando implementado em um dispositivo real.

Ao executar no dispositivo retornará dados como normal usando CoreLocation, mas no simulador ele irá ler a latitude ea longitude de um arquivo de texto (definida no arquivo DLocationManager.h).

Espero que isso ajude, a implementação está no lado simples e você tem que startUpdatingLocation e stopUpdatingLocation para atualizar a exibição.

Comentários e feedback será recebido com gratidão.

Outras dicas

Aqui é a minha simples hack que as forças do CLLocationMager para retornar os geocoords de Powell Tech Bookstore única no simulador:

#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

Use uma função de filtragem de troca em uma instância de teste quando executado no simulador. Onde quer que você recebido anteriormente a localização (chamada delegado, etc), passá-lo através deste:

+ (CLLocation *) wakkawakka: (CLLocation*) loc {
#ifdef TARGET_IPHONE_SIMULATOR
    /* replace with a test instance */
    return [[CLLocation alloc] initWithLatitude:10.0 longitude:20.0];
#else
    return loc;
#endif
}

problemas de gerenciamento de memória de lado ...

Eu acho que há outro (melhor IMHO) abordar aqui do que subclassificação CLLocationManager como em

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

Em ObjectiveC parece ser possível substituir um método existente de uma classe sem substituindo-lo. Isso é muitas vezes chamado de "swizzling método":. Você define a sua própria categoria para uma classe existente de implementar um método existente nele

Do ponto de vista do cliente, tudo é transparente: ele tem a sensação de que ele está lidando com a CLLocationManager real, mas na verdade, você "tomou o controle dela" . Para que ele não precisa lidar com qualquer subclasse especial ou qualquer protocolo de delegado especial:. Ele continua usando a mesma classe / protocolo como o de CoreLocation

Aqui está um exemplo para pegou o controle sobre o delegado um cliente iria injectar:

 
@implementation CLLocationManager (simulator) 

-(void) setDelegate:(id)delegate { //your own implementation of the setDelegate... } -(id)delegate { //your own implementation of the delegate.... } -(void)startUpdatingLocation { } -(void)stopUpdatingLocation { } //.... //same for the rest of any method available in the standard CLLocationManager @end

Em seguida, nesta implementação, você está livre para lidar com um conjunto pré definido de coordenadas (provenientes de um arquivo de qualquer outro) que será "empurrado" para o delegado usando o protocolo CLLocationManagerDelegate padrão.

Gatilho os retornos de chamada Core Location de uma classe de teste, se você precisa definir um local diferente do simulador lhe dá.

locationManager: didUpdateToLocation e locationManager:. DidFailedWithError callbacks sobrecarregados nunca são chamados no simulador iphone, isso é meio estranho, tudo que eu vejo é 0,0000 para lat, e 0.0000 para lon. como a posição. Na situação que você desenvolver algo, que é meio difícil de implementar todas as possíveis situações que podem ocorrer durante o manuseio localização, usando apenas simulador de ambiente.

Se você está interessado em atualizar o ponto userLocation azul em um MKMapView com as atualizações de localização simuladas, confira o meu FTLocationSimulator em http://github.com/futuretap/FTLocationSimulator

Ele lê um arquivo KML gerado pelo Google Earth para fornecer atualizações de localização contínuos.

Testing CoreLocation no iPhone Simulator

1) Para testar a localização no simulador, o melhor caminho é a utilização de arquivos GPX, basta ir ao Arquivos -> Novo -> Recurso -.> Arquivo GPX

2) Depois de adicionar a atualização de arquivos GPX as coordenadas de localização, como desejado.

3) uma vez que o arquivo GPX é adicionado ao projeto, selecione a Esquema -> Editar Esquema -> Executar -> Permitir Localização Simulação .tick a simulação localização e selecione o nome do arquivo GPX você acabou de criar.

Desta forma simulador irá sempre escolher suas coordenadas desejadas, que adicionamos em nosso arquivo GPX.

Criar o arquivo GPX

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top