Symulator XCode / iOS: ręczne wyzwalanie znaczącej zmiany lokalizacji

Czy istnieje sposób, aby ręcznie powiedzieć urządzeniu, aby wysłało powiadomienie o znaczącej zmianie lokalizacji, które obudzi wszystkie aplikacje zarejestrowane dla tego powiadomienia? To jest tylko do testowania i zdaję sobie sprawę, że to prywatne wywołanie API zostanie odrzucone po przesłaniu do app store.

Author: Regis_AG, 2011-05-28

9 answers

Więc dwie odpowiedzi:

A) wskocz do pociągu: -)

B) użyj symulatora. W iOS 5.x simulator, istnieje menu debugowania, które ma podmenu lokalizacja. Wybierz freeway drive. To rozpocznie symulator na wyimaginowanej podróży w dół scenic 280 w północnej Kalifornii. Daje wszystko oprócz widoku: aplikacja otrzyma znaczące aktualizacje zmiany lokalizacji, a także zostanie uruchomiona w tle, jeśli zostanie zawieszona.

Aby zweryfikować, że faktycznie się poruszasz, Uruchom safari w symulatorze i przejdź do maps.google.com i kliknij mały przycisk śledzenia mojej lokalizacji. Powinieneś się ruszać.

Awesome! Teraz jak debugować problem cyklu życia uruchamiania przez system? Spokojnie! Xcode poczekaj na uruchomienie aplikacji, aby rozpocząć debugowanie. Z menu schemat wybierz opcję Edytuj schemat. W programie Uruchom i zakładce Informacje, dla ustawienia" uruchom "wybierz:" czekaj na mój.aplikacja do uruchomienia ".

Uruchom aplikację raz w symulatorze, tak aby rozpocząć monitorowanie aktualizacji lokalizacji, a następnie wymusić jego zamknięcie, tak aby został zawieszony. Dodaj punkt przerwania w aplikacji Zakończ uruchamianie funkcji i poczekaj. Gdy tylko symulator posunął się wystarczająco daleko, aplikacja zostanie obudzona, Twój breakpoint hit, i jesteś w pieniądze.

Ale tak naprawdę jazda pociągiem jest fajniejsza.

 184
Author: MagicSeth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-09 21:32:56

Cóż, odkryłem, że mogę to zrobić, włączając i wyłączając tryb samolotowy i / lub WiFi. Być może uruchom aplikację z urządzeniem w trybie samolotowym, a następnie zamknij aplikację i wyłącz Tryb samolotowy. To włączy GPS i wymusi wysłanie aktualizacji lokalizacji.

 15
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 09:24:24

Chciałem również przetestować ponowne uruchomienie mojej zakończonej aplikacji, która wykorzystuje znaczące monitorowanie zmian. Napisałem fragment kodu, aby wyświetlał lokalne powiadomienie, gdy zostanie uruchomiony przez klucz lokalizacji w słowniku opcji uruchamiania.

Uruchomiłem aplikację w symulatorze. Potem zabił go z paska wielozadaniowego. Następnie ustawiłem lokalizację symulatora iOS na niestandardową lokalizację. Rzuciłem symulator i zacząłem od nowa. Moja aplikacja otrzymała znaczącą aktualizację lokalizacji i pokazałem lokalne powiadomienie.

 4
Author: aslisabanci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-12 11:29:08

Zmagałem się z tym samym problemem, jak przetestować "startmonitoringsignantlocationchanges" i sprawdzić, czy moja aplikacja otrzymuje aktualizacje lokalizacji po zawieszeniu.

Nie udało mi się złapać wykonania w punkcie przerwania, ale udało mi się zobaczyć wyniki mojej implementacji, wysyłając nowe dane o lokalizacji na serwer.

Cały przepływ: - Zaimplementowane z "startmonitoringsignuficantlocationchanges" i wywołanie API do mojego serwera w celu aktualizacji szerokości geograficznej lokalizacji i Długość geograficzna - Ustaw możliwość aktualizacji lokalizacji w trybie tła na true - Uruchom aplikację, aby menedżer lokalizacji został zainicjowany, a aplikacja nasłuchuje zmian lokalizacji - Wymuś zamknięcie aplikacji - Ustaw debug - >location on simulator to freeway drive - Otwarte mapy, aby sprawdzić, czy Lokalizacja się zmienia - Czekał na serwerze, aby zobaczyć aktualizacje lokalizacji i dostawał nowe wyniki co około 3 minuty

Jednak nadal nie jestem pewien, czy jest to wystarczająco dobre na prawdziwym urządzeniu.

I ' m praca na Xcode w wersji 6.0.1( 6A317); testowany na symulatorze iPhone 5s (8.0).

 3
Author: Bardh Lohaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-19 23:54:45

W zależności od scenariusza proponowałbym dwa rozwiązania:

  1. Użyj timera lub LocalNotification, które okresowo wywołuje stopmonitoringsignnificantlocationchanges, a następnie startmonitoringsignnificantlocationchanges, które powinny wywołać nową lokalizację do wysłania do Twojego kodu (może to być ta sama lokalizacja, co wcześniej).

  2. Zbuduj swój własny symulator GPS, który zaczniesz w debug buildach i który wywoła te same metody delegatów, jak CLLocationManager zrób.

 1
Author: sliver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-02 10:49:13

Jedna rzecz zauważyłem w iOS 7 i Xcode 5.1.1 - jeśli spodziewasz się zdarzeń SLC, aby odpalić aplikację w trybie tła, może lub nie trafić w punkty przerwania ustawione. Dla mnie czasami komunikat NSLog nawet się nie pokazuje.

Jeśli tak jest w Twoim przypadku, możesz wyświetlić wyjścia NSLog z dziennika systemowego. Możesz otworzyć dziennik systemowy z menu debugowania symulatora iOS.

 1
Author: Ke Sun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-21 18:13:01

W systemie iOS 4 Możesz zarejestrować się w celu dokonania istotnych zmian lokalizacji. Z dokumentów Apple: dzięki tej usłudze aktualizacje lokalizacji są generowane tylko wtedy, gdy lokalizacja użytkownika znacznie się zmienia; dlatego jest to idealne rozwiązanie dla aplikacji społecznościowych lub aplikacji, które dostarczają użytkownikowi niekrytyczne, istotne dla lokalizacji informacje. Jeśli aplikacja zostanie zawieszona podczas aktualizacji, system obudzi ją w tle, aby obsłużyć aktualizację. Jeżeli aplikacja uruchamia tę usługę i jest wtedy po zakończeniu, system automatycznie uruchamia aplikację ponownie, gdy nowa lokalizacja stanie się dostępna. Ta usługa jest dostępna w systemie iOS 4 i nowszych, tylko na urządzeniach zawierających radio komórkowe.

Zobacz dokumenty Apple tutaj i tutaj .

Oto przykładowy kod do rejestracji w celu aktualizacji lokalizacji znaczników:

- (void)startSignificantChangeUpdates {

// Create the location manager if it doesn't exist
if (nil == locationManager)
    locationManager = [[CLLocationManager alloc] init];

locationManager.delegate = self;
[locationManager startMonitoringSignificantLocationChanges];

}

Dokumenty mówią: jeśli opuścisz tę usługę, a następnie Twoja aplikacja zostanie zawieszona lub zakończona, usługa automatycznie budzi aplikację po pojawieniu się nowych danych o lokalizacji. W czasie budzenia aplikacja jest umieszczana w tle i ma niewielką ilość czasu na przetworzenie danych lokalizacji. Ponieważ aplikacja jest w tle, powinna wykonywać minimalną pracę i unikać zadań (takich jak odpytywanie sieci), które mogłyby uniemożliwić jej powrót przed upływem przydzielonego czasu. Jeśli tak się nie stanie, Twoje zgłoszenie może zostać zakończone.

 0
Author: Jane Sales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 16:32:20

Freeway drive

Tutaj wpisz opis obrazka

// MARK: - MKMapViewDelegate

  func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
    guard let location = userLocation.location else { return }

    print(location.speed)
  }
 0
Author: onmyway133,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-31 11:33:06

Cóż, nie jest to możliwe, ponieważ zakres aplikacji jest ograniczony do własnej przestrzeni i tego rodzaju powiadomienia nie mogą być generowane z udokumentowaną listą API Apple. Oczywiście.. jeśli używany jest nieudokumentowany API, aplikacja zostanie odrzucona przez apple z powodu użycia nieudokumentowanego / prywatnego API.

 -4
Author: samfisher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-24 07:11:40