Xcode / iOS 시뮬레이터:중요한 위치 변경을 수동으로 트리거
이 알림에 등록된 응용 프로그램을 깨울 중요한 위치 변경 알림을 발송하도록 장치에 수동으로 지시하는 방법이 있습니까?이것은 테스트 전용이며, 앱 스토어에 제출하면 이 개인 API 호출이 거부될 것으로 알고 있습니다.
그래서 두 가지 답이 있습니다.
기차에 올라타세요 :-)
시뮬레이터를 사용합니다.iOS 5.x 시뮬레이터에는 위치 하위 메뉴가 있는 디버그 메뉴가 있습니다.고속도로 주행을 선택합니다.이것은 이 시뮬레이터를 북부 캘리포니아의 경치 좋은 280곳을 내려가는 상상의 여행으로 시작할 것입니다.보기를 제외한 모든 것을 제공합니다. 앱은 중요한 위치 변경 업데이트를 받고 일시 중단된 경우 백그라운드에서 실행됩니다.
실제로 이동 중인지 확인하려면 시뮬레이터에서 사파리를 실행하고 maps.google.com 으로 이동하여 작은 내 위치 추적 버튼을 클릭합니다.당신은 움직여야 합니다.
아주 좋아요!이제 시스템에 의해 시작되는 라이프사이클 문제를 어떻게 디버깅합니까?쉬운! 디버깅을 시작하기 위해 앱이 실행될 때까지 xCode를 기다립니다.구성표 메뉴에서 구성표 편집을 선택합니다.실행 구성표 및 정보 탭에서 "실행" 설정에 대해 "내.app이 실행될 때까지 대기"를 선택합니다.
시뮬레이터에서 앱을 한 번 실행하여 위치 업데이트 모니터링을 시작한 다음 강제 종료하여 일시 중단합니다.응용 프로그램에서 중단점을 추가하고 기능 시작을 완료한 후 기다립니다.시뮬레이터가 충분히 진행되면 즉시 애플리케이션이 실행되고 중단점이 적중하여 수익을 얻을 수 있습니다.
하지만 정말로, 기차를 타는 것이 더 재미있습니다.
비행기 모드 및/또는 WiFi를 켜고 끌 수 있습니다.아마도 비행기 모드에서 장치로 앱을 시작한 다음 앱을 닫고 비행기 모드를 끕니다.그러면 GPS가 켜지고 위치 업데이트가 강제로 전송됩니다.
또한 중요한 변경 모니터링을 사용하는 종료된 앱의 재실행을 테스트하고 싶었습니다.실행 옵션 사전의 위치 키로 실행될 때 로컬 알림이 표시되도록 코드를 작성했습니다.
저는 시뮬레이터에서 앱을 실행했습니다.그리고 멀티태스킹 바에서 죽였습니다.그런 다음 iOS 시뮬레이터의 위치를 사용자 지정 위치로 설정합니다.저는 시뮬레이터를 그만두고 다시 시작했습니다.내 앱은 중요한 위치 업데이트를 받았고 로컬 알림을 보여주었습니다.
저는 'MonitoringSignificantLocation Changes'를 테스트하고 일시 중단되었을 때 앱이 위치 업데이트를 수신하는지 확인하는 방법에 대해 같은 문제로 어려움을 겪고 있었습니다.
중단점에서 실행을 감지할 수는 없었지만, 서버에 새 위치 데이터를 전송하여 구현 결과가 제대로 작동하는 것을 확인할 수 있었습니다.
전체 흐름: - 'MonitoringSignificantLocationChanges' 및 API 호출을 통해 서버에 구현되어 위치 위도 및 경도 업데이트 - 위치 업데이트 백그라운드 모드 기능을 true로 설정 - 위치 관리자가 시작되고 앱이 위치 변경을 수신하도록 앱 실행 - 강제 종료 - 데뷰 설정g->Simulator에서 고속도로 드라이브까지의 위치 - 위치가 변경되는지 확인하기 위해 지도를 열었습니다 - 위치 업데이트를 확인하기 위해 서버에서 대기했으며 약 3분마다 새로운 결과를 얻고 있었습니다.
하지만 실제 기기에서 이것이 충분히 괜찮은지는 아직 확실하지 않습니다.
저는 Xcode Version 6.0.1(6A317)에서 작업 중이며, Simulator iPhone 5s(8.0)에서 테스트되었습니다.
에 더해해야 할 MagicSeth를 사용하여 수 .UIApplication.LaunchOptionsKey.location설정 앱의 일반 > 개인 정보 화면에서 위치 서비스를 비활성화했다가 다시 활성화하여 키를 누릅니다.
시나리오에 따라 두 가지 솔루션을 제안합니다.
타이머 또는 로컬 알림을 사용하여 주기적으로 MonitoringSignificantLocationChanges를 중지한 후 MonitoringSignificantLocationChanges를 시작하여 코드로 새 위치를 전송하도록 트리거합니다(이전과 동일한 위치일 수 있음).
디버그 빌드에서 시작하여 CLLocationManager가 수행하는 것과 동일한 위임 메서드를 호출하는 자신만의 GPS 시뮬레이터를 구축합니다.
iOS 7과 Xcode 5.1.1에서 한 가지 주목할 점 - SLC 이벤트가 앱을 백그라운드 모드로 실행할 것으로 예상한다면 설정한 중단점에 도달하거나 도달하지 않을 수 있습니다.저는 가끔 NSLog 메시지가 나타나지도 않습니다.
이 경우 시스템 로그에서 NSLog 출력을 볼 수 있습니다.iOS Simulator의 Debug 메뉴에서 System Log를 열 수 있습니다.
iOS 4에서는 중요한 위치 변경을 등록할 수 있습니다.Apple 문서에서:이 서비스를 사용하면 사용자의 위치가 크게 변경될 때만 위치 업데이트가 생성되므로 중요하지 않은 위치 관련 정보를 사용자에게 제공하는 소셜 애플리케이션 또는 애플리케이션에 적합합니다.업데이트가 발생할 때 응용 프로그램이 일시 중단되면 시스템이 백그라운드에서 응용 프로그램을 절전 모드로 전환하여 업데이트를 처리합니다.응용 프로그램이 이 서비스를 시작한 후 종료되면 새 위치를 사용할 수 있게 되면 시스템이 자동으로 응용 프로그램을 다시 시작합니다.이 서비스는 iOS 4 이상에서 셀룰러 무선이 포함된 장치에서만 사용할 수 있습니다.
여기 및 여기에서 Apple 문서를 참조하십시오.
다음은 서명 위치 업데이트를 위해 등록하는 몇 가지 예제 코드입니다.
- (void)startSignificantChangeUpdates {
// Create the location manager if it doesn't exist
if (nil == locationManager)
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager startMonitoringSignificantLocationChanges];
}
문서에 따르면, 이 서비스를 실행 중인 상태로 두고 애플리케이션이 일시 중단 또는 종료되면 새로운 위치 데이터가 도착할 때 서비스가 자동으로 애플리케이션을 깨웁니다.웨이크업 시간에 응용 프로그램이 백그라운드로 전환되고 위치 데이터를 처리하는 데 약간의 시간이 주어집니다.응용 프로그램은 백그라운드에 있으므로 최소한의 작업만 수행하고 할당된 시간이 만료되기 전에 반환되지 않도록 하는 작업(예: 네트워크 쿼리)을 피해야 합니다.그렇지 않으면 응용 프로그램이 종료될 수 있습니다.
프리웨이 드라이브
// MARK: - MKMapViewDelegate
func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
guard let location = userLocation.location else { return }
print(location.speed)
}
응용 프로그램 범위가 자체 공간으로 제한되고 Apple Documented APIs 목록에서 이러한 알림을 생성할 수 없기 때문에 이 작업은 불가능합니다.물론..문서화되지 않은 API를 사용하는 경우, 문서화되지 않은/개인 API의 사용으로 인해 애플리케이션이 애플로부터 거부됩니다.
언급URL : https://stackoverflow.com/questions/6158304/xcode-ios-simulator-trigger-significant-location-change-manually
'programing' 카테고리의 다른 글
| 정의되지 않은 'visitExpression' 속성을 읽을 수 없습니다. (0) | 2023.08.07 |
|---|---|
| jQuery에서 csv로 내보내기 (0) | 2023.08.07 |
| Angular 2 라우터 이벤트 수신기 (0) | 2023.08.02 |
| com.google.android.gms:play-services를 찾을 수 없습니다. 3.1.59 3.2.25 4.0.30 4.1.32 4.2.40 4.2.42 4.3.23 4.4.525 5.025 5.025 5.0.89 6.1.11 6.71 6.87 (0) | 2023.08.02 |
| 전달된 배열의 C 크기 (0) | 2023.08.02 |
