Установите местоположение в iPhone Simulator


124

Как я могу установить местоположение (как оно определяется в сервисах CoreLocation) в iPhone Simulator?


Я добавил метод для Xcode 6. stackoverflow.com/questions/19694205/…
Ohmy 04

Кому-нибудь удалось заставить это работать в React native, симуляторе?
Никос

В iOS 13 beta 2 я мог видеть только варианты «Нет» и «Пользовательский». Есть ли у кого-нибудь еще эта проблема? stackoverflow.com/q/56733625/1364053
nr5 08

Ответы:


122

Начиная с iOS 5, у симулятора есть настраиваемое местоположение.

В меню «Отладка» последняя запись - «Местоположение»; это дает вам подменю с:

  • Никто
  • Пользовательское местоположение
  • Магазины Apple
  • яблоко
  • Городская поездка на велосипеде
  • City Run
  • Автострада

Пользовательское местоположение позволяет вам ввести значение широты / долготы. Велосипедная прогулка, City Run и Freeway Drive - это моделирование движущегося места (конечно, в Купертино).

Конечно, это не помогает при отладке iOS 4 (или более ранней версии); но это явное улучшение!


где находится меню отладки в симуляторе iOS?
Lucky_girl 06

1
это работает, но это для меню отладки на симуляторе, а не на xcode
Лэнс Самария

2
Для симулятора iOS он теперь находится в разделе «Возможности»
J. Saw

85
  1. Запустить проект в iPhone Simulator
  2. Создайте в TextEdit файл следующий файл, назовите его, например, MyOffice. Сделайте расширение как .gpx введите описание изображения здесь

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

  3. Выберите в Xcode в области моделирования Add GPX File to Project...введите описание изображения здесь

  4. Добавить созданный файл из меню в проект.
  5. Теперь вы можете видеть свое местоположение в области моделирования:введите описание изображения здесь

TextEdit не сохраняет файл .gpx. Как я сделаю?

2
сохраните его как .txt (или .xml), а затем переименуйте в .gpx
beryllium

7
Спасибо! Очень просто, отлично работает. Если кто-то еще использует это, вот образец файла GPX в тексте, чтобы вы могли его скопировать и вставить: <? Xml version = "1.0"?> <Gpx version = "1.0" creator = "Name"> <wpt lat = "" lon = ""> <name> Офис </name> </wpt> </gpx>
RyanG

1
Вы спасли мне день «+1».
SAHIL 01

3
мы можем включить в это время? Я хочу протестировать метод
startMonitoringSignificantLocationChanges

17

В моем обратном вызове делегата я проверяю, работаю ли я в симуляторе ( #if TARGET_ IPHONE_SIMULATOR), и если да, я предоставляю свои собственные, предварительно проверенные , широту / долготу. Насколько мне известно, другого выхода нет.


3
Начиная с Xcode 4.2, теперь в Debugменю симулятора есть способ, использующий Locationзапись, которая позволяет устанавливать пользовательское местоположение или выбирать из некоторых предопределенных поездок и местоположений.
progrmr

17

в меню iOS Simulator перейдите в Debug -> Location -> Custom Location. Здесь вы можете установить широту и долготу и соответственно протестировать приложение. Это работает с mapkit, а также с CLLocationManager.


10

XCode 11.3 и ранее:

Debug -> Location -> Custom Location

введите описание изображения здесь

XCode 11.4+:

Features -> Location -> Custom Location

введите описание изображения здесь

Чтобы узнать, какая у вас версия XCode

$ /usr/bin/xcodebuild -version

5

До iOS 5 это можно было сделать в коде:

Я использую этот фрагмент непосредственно перед @implementationклассом, где мне нужны мои поддельные данные о заголовке и местоположении.

#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

После iOS 5 просто включите файл GPX в свой проект, как это, чтобы местоположение постоянно обновлялось 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>

Я использую GPSies.com для создания базового файла для данных gpx. Однако требуется небольшая очистка.

Активируйте, запустив симулятор и выбрав свой файл


(источник: castleandersen.dk )


4

Откройте приложение iOS Simulator из меню отладки -> Местоположение ->

  1. Никто
  2. Пользовательское местоположение
  3. Магазины Apple ...

4

Вы можете легко передать любое желаемое местоположение из приложения MacOS Maps в симулятор Xcode .

  1. Из Xcode запустите приложение в симуляторе, как обычно.
  2. Откройте приложение карт в macOS (для удобства я обычно создаю новый рабочий стол, на котором есть и симулятор, и приложение карты).
  3. Внутри карт (macOS) нажмите и удерживайте любую точку на карте или найдите место, чтобы карта нарисовала булавку там, где она вам нужна.
  4. Нажмите на булавку, затем на значок информации (i) ( см. Изображение ).
  5. В правом верхнем углу информационного окна щелкните значок общего доступа.
  6. Поделитесь местоположением с симулятором ( см. Изображение ).
  7. Подтверждайте и наслаждайтесь :)

Это позволяет вам быстро протестировать некоторые местоположения, имея представление о том, где они находятся географически (например, для тестирования геозон), и во время выполнения решать, куда идти дальше (например, для отладки и тонкой настройки).

Проверено на MacOS Catalina 10.15.4 и Xcode 11.4.


3

Добрые ребята из FutureTap сделали FTLocationSimulator бесплатно доступным на GitHub . Это позволяет вам подготовить тестовый маршрут с использованием, например, Google Earth, а затем заставить симулятор передать эти координаты вашему приложению.

Я написал в блоге сообщение о том, как использовать FTLocationSimulator для простого переключения между несколькими маршрутами во время тестирования функций определения местоположения.


3

вы можете добавить файлы gpx в свой проект и использовать их:
отредактируйте схему> параметры> разрешите моделирование местоположения> выберите имя файла, которое содержит, например:

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

при желании просто жестко закодируйте значения широты и долготы, возвращаемые менеджером местоположения. Но это старый стиль.

поэтому вы не добавляете его в симулятор, а в свой проект Xcode.


2
Как я могу использовать предопределенное местоположение. не могли бы вы объяснить подробно ??? Я хочу об этом знать.
Шрейаш Махаджан

щелкните xcode, затем продукт> схемы> Изменить схему> расположение ядра
Mumthezir VP

1

На момент написания этой статьи параметр местоположения для симулятора IOS был перемещен в Функции -> Местоположение -> Пользовательское местоположение.


0

Лучше поздно, чем никогда :)

Я только что наткнулся на iSimulate, который позволяет отправлять в приложение поддельное местоположение. Решение НЕ бесплатное.

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

Во всяком случае, я планирую это получить. скоро обновлю!


Я только что связался с разработчиками: «В параметрах iSimulate, доступных через верхнюю правую кнопку на экране« Выбрать компьютер для подключения », вы можете выбрать одно из четырех других мест для использования». Так что на самом деле помощи не много.
Саймон Вудсайд,

bitbucket.org/gnucoop/xamarin-ios-simulator-enhancements Это помогает моделировать локации бесплатно
Пьер

0

Где вы хотите указать свое местоположение? вы можете использовать mapkit api, чтобы показать ваше местоположение. см. icodeblog.com для получения более подробной информации о том, как использовать mapkit. Также вы можете сохранить желаемые координаты, просто создайте объект CLLocation2D * location; location.longitude = желаемое значение долготы; location.latitude = желаемое значение широты;


Это был старый вопрос, когда я только начал работать с SDK. Теперь я понимаю, что в Simulator нет поддержки для автоматизации CoreLocation, и это очень досадно.
Клифф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.