Defina o local no iPhone Simulator

123

Como posso definir o local (conforme escolhido nos serviços CoreLocation) no iPhone Simulator?

Penhasco
fonte
Eu adicionei um método para o Xcode 6. stackoverflow.com/questions/19694205/…
Ohmy 4/14/14
Alguém conseguiu fazer isso funcionar no simulador React nativo?
Nikos
Com o iOS 13 beta 2, eu podia ver apenas as opções "Nenhuma" e "Personalizada". Alguém mais está tendo este problema? stackoverflow.com/q/56733625/1364053
nr5

Respostas:

121

No iOS 5, o simulador tem um local configurável.

No menu Debug, a última entrada é "Location"; isso fornece um submenu com:

  • Nenhum
  • Local personalizado
  • Apple Stores
  • maçã
  • Passeio de bicicleta pela cidade
  • City Run
  • Freeway Drive

Localização personalizada permite inserir um valor de Lat / Long. Passeio de bicicleta, City Run e Freeway Drive são simulações de um local em movimento (em Cupertino, é claro).

Obviamente, isso não ajuda em nada na depuração do iOS 4 (ou anterior); mas é uma melhoria definitiva!

Robert Altman
fonte
onde está o menu de depuração no simulador IOS?
Lucky_girl
1
Isso funciona, mas é para o menu de depuração no simulador não aquele em xcode
Lance Samaria
2
Para simulador iOS, agora está localizado em "Recursos"
J. Saw
85
  1. Executar projeto no iPhone Simulator
  2. Crie no arquivo TextEdit o seguinte arquivo, chame-o de MyOffice, por exemplo. Faça a extensão como .gpx insira a descrição da imagem aqui

    <?xml version="1.0"?> <gpx version="1.0" creator="MyName"> <wpt lat="53.936166" lon="27.565370"> <name>MyOffice</name> </wpt> </gpx>

  3. Selecione no Xcode na área Simular Add GPX File to Project...insira a descrição da imagem aqui

  4. Adicione o arquivo criado do menu ao projeto.
  5. Agora você pode ver sua localização na área Simular:insira a descrição da imagem aqui
berílio
fonte
O TextEdit não salva o arquivo .gpx. Como eu faço?
2
salve-o como .txt (ou .xml) e renomeie-o para .gpx
berílio
7
Obrigado! Muito fácil, funciona muito bem. Caso alguém use isso, veja o exemplo do arquivo GPX no texto para que você possa copiá-lo e colá-lo: <? Xml version = "1.0"?> <Gpx version = "1.0" creator = "Nome"> <wpt lat = "" lon = ""> <name> Escritório </name> </wpt> </gpx>
RyanG
1
Você salvou meu dia "+1".
SAHIL
3
podemos incluir tempo nisso? Eu quero testar o método
startMonitoringSignificantLocationChanges
17

No retorno de chamada do delegado, verifico se estou executando em um simulador ( #if TARGET_ IPHONE_SIMULATOR) e, se estiver, forneço meu próprio Lat / Long pré-pesquisado. Que eu saiba, não há outro caminho.

Ben Gottlieb
fonte
3
A partir do Xcode 4.2, agora existe uma maneira no Debugmenu do simulador usando a Locationentrada que permite definir um local personalizado ou selecionar alguns passeios e locais predefinidos.
progrmr
16

no menu Simulador do iOS, vá para Depurar -> Local -> Local personalizado. Lá você pode definir a latitude e longitude e testar o aplicativo de acordo. Isso funciona com o mapkit e também com CLLocationManager.

Ravi Chokshi
fonte
10

XCode 11.3 e anterior:

Debug -> Location -> Custom Location

insira a descrição da imagem aqui

XCode 11.4+:

Features -> Location -> Custom Location

insira a descrição da imagem aqui

Para descobrir qual versão do XCode você possui

$ /usr/bin/xcodebuild -version
Samuel Hulla
fonte
5

Antes do iOS 5, você poderia fazê-lo em código:

Eu uso esse trecho antes @implementationda classe em que preciso dos meus dados falsos de cabeçalho e localização.

#if (TARGET_IPHONE_SIMULATOR)
@interface MyHeading : CLHeading
    -(CLLocationDirection) magneticHeading;
    -(CLLocationDirection) trueHeading;
@end

@implementation MyHeading
    -(CLLocationDirection) magneticHeading { return 90; }
    -(CLLocationDirection) trueHeading { return 91; }
@end

@implementation CLLocationManager (TemporaryLocationFix)
- (void)locationFix {
    CLLocation *location = [[CLLocation alloc] initWithLatitude:55.932 longitude:12.321];
    [[self delegate] locationManager:self didUpdateToLocation:location fromLocation:nil];

    id heading  = [[MyHeading alloc] init];
    [[self delegate] locationManager:self didUpdateHeading: heading];
}

-(void)startUpdatingHeading {
    [self performSelector:@selector(locationFix) withObject:nil afterDelay:0.1];
}

- (void)startUpdatingLocation {
    [self performSelector:@selector(locationFix) withObject:nil afterDelay:0.1];
}
@end
#endif

Após o iOS 5, inclua um arquivo GPX em seu projeto como este para que o local seja atualizado continuamente Hillerød.gpx:

<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
    <wpt lat="55.93619760" lon="12.29131930"></wpt>
    <wpt lat="55.93625770" lon="12.29108330"></wpt>
    <wpt lat="55.93631780" lon="12.29078290"></wpt>
    <wpt lat="55.93642600" lon="12.29041810"></wpt>
    <wpt lat="55.93653420" lon="12.28998890"></wpt>
    <wpt lat="55.93660630" lon="12.28966710"></wpt>
    <wpt lat="55.93670240" lon="12.28936670"></wpt>
    <wpt lat="55.93677450" lon="12.28921650"></wpt>
    <wpt lat="55.93709900" lon="12.28945250"></wpt>
    <wpt lat="55.93747160" lon="12.28949540"></wpt>
    <wpt lat="55.93770000" lon="12.28966710"></wpt>
    <wpt lat="55.93785620" lon="12.28977440"></wpt>
    <wpt lat="55.93809660" lon="12.28988170"></wpt>
    <wpt lat="55.93832490" lon="12.28994600"></wpt>
    <wpt lat="55.93845710" lon="12.28996750"></wpt>
    <wpt lat="55.93856530" lon="12.29007480"></wpt>
    <wpt lat="55.93872150" lon="12.29013910"></wpt>
    <wpt lat="55.93886570" lon="12.28975290"></wpt>
    <wpt lat="55.93898590" lon="12.28955980"></wpt>
    <wpt lat="55.93910610" lon="12.28919500"></wpt>
    <wpt lat="55.93861330" lon="12.28883020"></wpt>
    <wpt lat="55.93845710" lon="12.28868000"></wpt>
    <wpt lat="55.93827680" lon="12.28850840"></wpt>
    <wpt lat="55.93809660" lon="12.28842250"></wpt>
    <wpt lat="55.93796440" lon="12.28831520"></wpt>
    <wpt lat="55.93780810" lon="12.28810070"></wpt>
    <wpt lat="55.93755570" lon="12.28790760"></wpt>
    <wpt lat="55.93739950" lon="12.28775730"></wpt>
    <wpt lat="55.93726730" lon="12.28767150"></wpt>
    <wpt lat="55.93707500" lon="12.28760710"></wpt>
    <wpt lat="55.93690670" lon="12.28734970"></wpt>
    <wpt lat="55.93675050" lon="12.28726380"></wpt>
    <wpt lat="55.93649810" lon="12.28713510"></wpt>
    <wpt lat="55.93625770" lon="12.28687760"></wpt>
    <wpt lat="55.93596930" lon="12.28679180"></wpt>
    <wpt lat="55.93587310" lon="12.28719940"></wpt>
    <wpt lat="55.93575290" lon="12.28752130"></wpt>
    <wpt lat="55.93564480" lon="12.28797190"></wpt>
    <wpt lat="55.93554860" lon="12.28833670"></wpt>
    <wpt lat="55.93550050" lon="12.28868000"></wpt>
    <wpt lat="55.93535630" lon="12.28900190"></wpt>
    <wpt lat="55.93515200" lon="12.28936670"></wpt>
    <wpt lat="55.93505580" lon="12.28958120"></wpt>
    <wpt lat="55.93481550" lon="12.29001040"></wpt>
    <wpt lat="55.93468320" lon="12.29033230"></wpt>
    <wpt lat="55.93452700" lon="12.29063270"></wpt>
    <wpt lat="55.93438280" lon="12.29095450"></wpt>
    <wpt lat="55.93425050" lon="12.29121200"></wpt>
    <wpt lat="55.93413040" lon="12.29140520"></wpt>
    <wpt lat="55.93401020" lon="12.29168410"></wpt>
    <wpt lat="55.93389000" lon="12.29189870"></wpt>
    <wpt lat="55.93372170" lon="12.29239220"></wpt>
    <wpt lat="55.93385390" lon="12.29258530"></wpt>
    <wpt lat="55.93409430" lon="12.29295010"></wpt>
    <wpt lat="55.93421450" lon="12.29320760"></wpt>
    <wpt lat="55.93433470" lon="12.29333630"></wpt>
    <wpt lat="55.93445490" lon="12.29350800"></wpt>
    <wpt lat="55.93463520" lon="12.29374400"></wpt>
    <wpt lat="55.93479140" lon="12.29410880"></wpt>
    <wpt lat="55.93491160" lon="12.29419460"></wpt>
    <wpt lat="55.93515200" lon="12.29458090"></wpt>
    <wpt lat="55.93545250" lon="12.29494570"></wpt>
    <wpt lat="55.93571690" lon="12.29505300"></wpt>
    <wpt lat="55.93593320" lon="12.29513880"></wpt>
    <wpt lat="55.93617360" lon="12.29522460"></wpt>
    <wpt lat="55.93622170" lon="12.29537480"></wpt>
    <wpt lat="55.93713510" lon="12.29505300"></wpt>
    <wpt lat="55.93776000" lon="12.29378700"></wpt>
    <wpt lat="55.93904600" lon="12.29531040"></wpt>
    <wpt lat="55.94004350" lon="12.29552500"></wpt>
    <wpt lat="55.94023570" lon="12.29561090"></wpt>
    <wpt lat="55.94019970" lon="12.29591130"></wpt>
    <wpt lat="55.94017560" lon="12.29629750"></wpt>
    <wpt lat="55.94017560" lon="12.29670520"></wpt>
    <wpt lat="55.94017560" lon="12.29713430"></wpt>
    <wpt lat="55.94019970" lon="12.29754200"></wpt>
    <wpt lat="55.94024780" lon="12.29816430"></wpt>
    <wpt lat="55.94051210" lon="12.29842180"></wpt>
    <wpt lat="55.94084860" lon="12.29820720"></wpt>
    <wpt lat="55.94105290" lon="12.29799270"></wpt>
    <wpt lat="55.94123320" lon="12.29777810"></wpt>
    <wpt lat="55.94140140" lon="12.29749910"></wpt>
    <wpt lat="55.94142550" lon="12.29726310"></wpt>
    <wpt lat="55.94147350" lon="12.29687690"></wpt>
    <wpt lat="55.94155760" lon="12.29619020"></wpt>
    <wpt lat="55.94161770" lon="12.29576110"></wpt>
    <wpt lat="55.94148550" lon="12.29531040"></wpt>
    <wpt lat="55.94093270" lon="12.29522460"></wpt>
    <wpt lat="55.94041600" lon="12.29518170"></wpt>
    <wpt lat="55.94056020" lon="12.29398010"></wpt>
    <wpt lat="55.94024780" lon="12.29352950"></wpt>
    <wpt lat="55.94001940" lon="12.29335780"></wpt>
    <wpt lat="55.93992330" lon="12.29325050"></wpt>
    <wpt lat="55.93969490" lon="12.29299300"></wpt>
    <wpt lat="55.93952670" lon="12.29277840"></wpt>
    <wpt lat="55.93928630" lon="12.29260680"></wpt>
    <wpt lat="55.93915410" lon="12.29232780"></wpt>
    <wpt lat="55.93928630" lon="12.29202740"></wpt>
    <wpt lat="55.93933440" lon="12.29174850"></wpt>
    <wpt lat="55.93947860" lon="12.29116910"></wpt>
    <wpt lat="55.93965890" lon="12.29095450"></wpt>
    <wpt lat="55.94001940" lon="12.29061120"></wpt>
    <wpt lat="55.94041600" lon="12.29084730"></wpt>
    <wpt lat="55.94076450" lon="12.29101890"></wpt>
    <wpt lat="55.94080060" lon="12.29065410"></wpt>
    <wpt lat="55.94086060" lon="12.29031080"></wpt>
    <wpt lat="55.94092070" lon="12.28990310"></wpt>
    <wpt lat="55.94099280" lon="12.28975290"></wpt>
    <wpt lat="55.94119710" lon="12.28986020"></wpt>
    <wpt lat="55.94134130" lon="12.28998890"></wpt>
    <wpt lat="55.94147350" lon="12.29007480"></wpt>
    <wpt lat="55.94166580" lon="12.29003190"></wpt>
    <wpt lat="55.94176190" lon="12.28938810"></wpt>
    <wpt lat="55.94183400" lon="12.28893750"></wpt>
    <wpt lat="55.94194220" lon="12.28850840"></wpt>
    <wpt lat="55.94199030" lon="12.28835820"></wpt>
    <wpt lat="55.94215850" lon="12.28859420"></wpt>
    <wpt lat="55.94250700" lon="12.28883020"></wpt>
    <wpt lat="55.94267520" lon="12.28893750"></wpt>
    <wpt lat="55.94284350" lon="12.28902330"></wpt>
    <wpt lat="55.94304770" lon="12.28915210"></wpt>
    <wpt lat="55.94325200" lon="12.28925940"></wpt>
    <wpt lat="55.94348030" lon="12.28953830"></wpt>
    <wpt lat="55.94366060" lon="12.28966710"></wpt>
    <wpt lat="55.94388890" lon="12.28975290"></wpt>
    <wpt lat="55.94399700" lon="12.28994600"></wpt>
    <wpt lat="55.94379280" lon="12.29065410"></wpt>
    <wpt lat="55.94364860" lon="12.29095450"></wpt>
    <wpt lat="55.94350440" lon="12.29127640"></wpt>
    <wpt lat="55.94340820" lon="12.29155540"></wpt>
    <wpt lat="55.94331210" lon="12.29198450"></wpt>
    <wpt lat="55.94315590" lon="12.29269260"></wpt>
    <wpt lat="55.94310780" lon="12.29318610"></wpt>
    <wpt lat="55.94301170" lon="12.29361530"></wpt>
    <wpt lat="55.94292760" lon="12.29408740"></wpt>
    <wpt lat="55.94290350" lon="12.29436630"></wpt>
    <wpt lat="55.94287950" lon="12.29453800"></wpt>
    <wpt lat="55.94283140" lon="12.29533190"></wpt>
    <wpt lat="55.94274730" lon="12.29606150"></wpt>
    <wpt lat="55.94278340" lon="12.29621170"></wpt>
    <wpt lat="55.94280740" lon="12.29649060"></wpt>
    <wpt lat="55.94284350" lon="12.29679100"></wpt>
    <wpt lat="55.94284350" lon="12.29734890"></wpt>
    <wpt lat="55.94308380" lon="12.29837890"></wpt>
    <wpt lat="55.94315590" lon="12.29852910"></wpt>
    <wpt lat="55.94263920" lon="12.29906550"></wpt>
    <wpt lat="55.94237480" lon="12.29910850"></wpt>
    <wpt lat="55.94220660" lon="12.29915140"></wpt>
    <wpt lat="55.94208640" lon="12.29902260"></wpt>
    <wpt lat="55.94196620" lon="12.29887240"></wpt>
    <wpt lat="55.94176190" lon="12.29794970"></wpt>
    <wpt lat="55.94156970" lon="12.29760640"></wpt>
</gpx>

Eu uso o GPSies.com para criar o arquivo base para os dados gpx. É necessário um pouco de limpeza.

Ative executando o simulador e escolhendo seu arquivo


(fonte: castleandersen.dk )

Castelo de Niels
fonte
4

Abra o aplicativo iOS Simulator no menu Debug -> Location ->

  1. Nenhum
  2. Local personalizado
  3. Lojas da Apple ...
Abo3atef
fonte
4

Você pode compartilhar facilmente qualquer local desejado do aplicativo macOS Maps para o simulador Xcode .

  1. No Xcode, execute o aplicativo no simulador como costuma fazer.
  2. Abra o aplicativo de mapas no macOS (por conveniência, eu costumo criar uma nova área de trabalho onde possuo o simulador e o aplicativo de mapa).
  3. Dentro dos mapas (macOS), clique longo em qualquer ponto do mapa ou pesquise um local para deixar o mapa desenhar um alfinete onde você precisar.
  4. Clique no alfinete e depois no ícone de informação (i) ( veja a imagem ).
  5. No canto superior direito da exibição de informações, clique no ícone de compartilhamento.
  6. Compartilhe a localização com o simulador ( veja a imagem ).
  7. Confirme e aproveite :)

Isso permite que você teste alguns locais rapidamente, entendendo onde é geograficamente o local (por exemplo, para testar geofencing) e decida em tempo de execução para onde ir em seguida (por exemplo, para itens de depuração e ajuste fino).

Testei isso no MacOS Catalina 10.15.4 e no Xcode 11.4.

AlessandroSteri
fonte
3

O pessoal da FutureTap disponibilizou o FTLocationSimulator gratuitamente no GitHub . Ele permite que você prepare uma rota de teste usando, por exemplo, o Google Earth e faça com que o simulador alimente essas coordenadas no seu aplicativo.

Eu escrevi uma postagem no blog sobre como usar o FTLocationSimulator para alternar facilmente entre várias rotas durante o teste dos recursos de localização.

Claus Broch
fonte
3

você pode adicionar arquivos gpx ao seu projeto e usá-lo:
esquema de edição> opções> permitir simulação de local> escolha o nome do arquivo que contém, por exemplo:

<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
    <wpt lat="41.92296" lon="-87.63892"></wpt>
</gpx>

opcionalmente, apenas codifique os valores lat / lon retornados pelo gerenciador de localização. Este é um estilo antigo.

então você não o adicionará ao simulador, mas ao seu projeto do Xcode.

Zsolt
fonte
2
Como posso usar o local predefinido. você pode explicar em detalhes ??? Eu quero saber sobre isso.
Shreyash Mahajan 23/08/19
clique no xcode e depois em produto> esquemas> Editar esquema> localização principal
Mumthezir VP 15/12/2015
1

Até o momento, a opção de localização para o simulador IOS foi movida para Recursos -> Localização -> Localização personalizada

caçador
fonte
0

Antes tarde do que nunca :)

Acabei de encontrar este iSimulate, que permite que você envie um local falso para o aplicativo. A solução NÃO é gratuita.

> Q: How does iSimulate work? 

> A: When added to your project, the iSimulate
> SDK library creates a listening server
> on your iPhone Simulator that waits
> for a connection from an iPhone/iPod
> running the iSimulate client. When
> such connection is established, the
> iSimulate client running on your
> iPhone/iPod captures all data from the
> accelerometer sensor, the touch
> events, the location and device ID and
> streams them to the server. The
> iSimulate SDK library then recreates
> all input events synthetically. This
> is entirely transparent to your
> application and does not interfere
> with your application's functionality.

Enfim, eu estou planejando conseguir isso. atualizará mais em breve!

prakash
fonte
Acabei de entrar em contato com os desenvolvedores: "Nas opções do iSimulate, acessíveis no botão superior direito da tela" Selecionar computador ao qual conectar-se ", você pode selecionar um dos quatro outros locais a serem utilizados." Então, realmente não ajuda muito.
Simon Woodside
bitbucket.org/gnucoop/xamarin-ios-simulator-enhancements Isso ajuda a simular locais gratuitamente
Pierre
0

Onde você deseja definir sua localização? você pode usar a API do mapkit para mostrar a localização de você. consulte icodeblog.com para obter mais detalhes sobre como usar o mapkit. Além disso, você pode armazenar os cordinados desejados, basta criar um local CLLocation2D * do objeto; location.longitude = seu valor de longitude desejado; location.latitude = seu valor de latitude desejado;

Rahul Vyas
fonte
Essa era uma pergunta antiga de quando eu era novo no SDK. Agora percebo que não há suporte para automatizar o CoreLocation no Simulador, o que é uma pena.
Cliff