Я устраняю неполадки в цикле запуска приложения на основе определения местоположения, который прекрасно работает на симуляторе iOS, но, очевидно, не запускает приложение на реальном устройстве.
Я настроил уведомления для входных и выходных событий. И симулятор, и устройства регистрируют и отображают эти уведомления.
Следующее, что должно произойти, это то, что приложение проходит процесс запуска, устанавливая состояние приложения таким образом, чтобы я мог без связи с отладчиком определить, запущено ли приложение, когда я его открываю с домашнего экрана.
На симуляторе вызывается код didEnterRegion, и я могу пройти по следующему коду запуска с помощью отладчика - успех.
Однако, когда я вынимаю устройство (на прогулку), все, что я получаю, это UNNotifications и никакой запуск приложения (что я могу сказать из пользовательского интерфейса в приложении на реальном устройстве)
Я уверен, что мне нужно улучшить мою стратегию тестирования (добро пожаловать в предложения!), Но на этом этапе я должен быть в состоянии ожидать, что приложение должно вести себя одинаково на симуляторе и реальном устройстве - это не так.
Почему ожидаемый результат происходит на симуляторе, а не на устройстве?
LocationService.swift
func handleRegionEnterEvent (for region: CLRegion) {
ApplicationController.sharedInstance.didEnterRegion(region)
}
func handleRegionExitEvent (for region: CLRegion) {
ApplicationController.sharedInstance.didExitRegion(region)
}
ApplicationController.swift
func didEnterRegion (_ region: CLRegion) {
// Present Alert
delegate?.handleUNEvent(note: "ENTER: \(region.identifier)")
// Start launch cycle
}
AppDelegate.swift
extension AppDelegate: AppControllerDelegate {
func handleUNEvent(note: String?) {
// Show an alert if application is active
if UIApplication.shared.applicationState == .active {
guard let message = note else { return }
Alert().showAlert(withMessage: "Application received UN while active: \(message)", title: "UNNotification")
} else {
// Otherwise present a local notification
guard let body = note else { return }
let notificationContent = UNMutableNotificationContent()
notificationContent.body = body
notificationContent.sound = UNNotificationSound.default
notificationContent.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
let request = UNNotificationRequest(identifier: "location_change",
content: notificationContent,
trigger: trigger)
UNUserNotificationCenter.current().add(request) { error in
if let error = error {
print("Error: \(error)")
}
}
}
}
}