From 99ffbe7e059c99623a3abcbde8babd04dc7a8d43 Mon Sep 17 00:00:00 2001 From: Jill Cardamon Date: Sun, 12 Dec 2021 21:24:43 -0500 Subject: [PATCH 1/4] Can log using OSLog. Trying to use OSLogStore for iOS 15. --- Sources/MapboxNavigation/CarPlayManager.swift | 70 ++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/Sources/MapboxNavigation/CarPlayManager.swift b/Sources/MapboxNavigation/CarPlayManager.swift index 22e5cc8ba0b..e20b69f2ada 100644 --- a/Sources/MapboxNavigation/CarPlayManager.swift +++ b/Sources/MapboxNavigation/CarPlayManager.swift @@ -2,6 +2,7 @@ import CarPlay import MapboxCoreNavigation import MapboxDirections import MapboxMaps +import os.log /** `CarPlayManager` is the main object responsible for orchestrating interactions with a Mapbox map on CarPlay. @@ -77,6 +78,7 @@ public class CarPlayManager: NSObject { private weak var navigationService: NavigationService? private var idleTimerCancellable: IdleTimerManager.Cancellable? + private let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "CarPlay") /** Programatically begins a CarPlay turn-by-turn navigation session. @@ -88,11 +90,13 @@ public class CarPlayManager: NSObject { public func beginNavigationWithCarPlay(using currentLocation: CLLocationCoordinate2D, navigationService: NavigationService) { // Stop the background `PassiveLocationProvider` sending location and heading update `mapView` before turn-by-turn navigation session starts. + os_log("Begin navigation with CarPlay", log: logger, type: .info) if let locationProvider = navigationMapView?.mapView.location.locationProvider { locationProvider.stopUpdatingLocation() locationProvider.stopUpdatingHeading() if let passiveLocationProvider = locationProvider as? PassiveLocationProvider { passiveLocationProvider.locationManager.pauseTripSession() + os_log("Trip session paused", log: logger, type: .info) } } @@ -143,6 +147,7 @@ public class CarPlayManager: NSObject { routingProvider: RoutingProvider, eventsManager: NavigationEventsManager? = nil, carPlayNavigationViewControllerClass: CarPlayNavigationViewController.Type? = nil) { + os_log("CarPlayManager initialized", log: logger, type: .info) self.styles = styles ?? [DayStyle(), NightStyle()] self.routingProvider = routingProvider self.eventsManager = eventsManager ?? .init(activeNavigationDataSource: nil, @@ -160,22 +165,74 @@ public class CarPlayManager: NSObject { selector: #selector(navigationCameraStateDidChange(_:)), name: .navigationCameraStateDidChange, object: carPlayMapViewController?.navigationMapView.navigationCamera) + os_log("Subscribed for notifications", log: logger, type: .info) } func unsubscribeFromNotifications() { NotificationCenter.default.removeObserver(self, name: .navigationCameraStateDidChange, object: carPlayMapViewController?.navigationMapView.navigationCamera) + os_log("Unsubscribed for notifications", log: logger, type: .info) } + func writeLogEvent() { + // OPEN FILE FOR LOGGING + + os_log("!!! CARPLAY TEST LOG ON ATTACH", + log: logger, + type: .debug) + + let stringToSave = "The string I want to save." + let path = getDocumentDirections() + print("!!! PATH: \(path)") + if let stringData = stringToSave.data(using: .utf8) { + try? stringData.write(to: path) + } + } + + func endLogging() { + // CLOSE FILE FOR LOGGING + + os_log("!!! CARPLAY TEST LOG ON DETACH", + log: logger, + type: .debug) + + let path = getDocumentDirections() + let stringToSave2 = "The SECOND string I want to save." + if let stringData2 = stringToSave2.data(using: .utf8) { + try? stringData2.write(to: path) + } + print("Log can be found here: \(path)") + } + + func getDocumentDirections() -> URL { + return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("carplayTestLog") + } + + func getLogEntries() throws -> [OSLogEntryLog] { + let logStore = try OSLogStore(scope: .currentProcessIdentifier) + let oneHourAgo = logStore.position(date: Date().addingTimeInterval(-3600)) + + let allEntries = try logStore.getEntries(at: oneHourAgo) + + // Filter the log to be relevant for carplay + return allEntries + .compactMap { $0 as? OSLogEntryLog } + .filter { $0.category == "CarPlay" } + } + + @objc func navigationCameraStateDidChange(_ notification: Notification) { guard let state = notification.userInfo?[NavigationCamera.NotificationUserInfoKey.state] as? NavigationCameraState else { return } switch state { case .idle: + os_log("Camera state: idle", log: logger, type: .info) carPlayMapViewController?.recenterButton.isHidden = false case .transitionToFollowing, .following: + os_log("Camera state: following", log: logger, type: .info) carPlayMapViewController?.recenterButton.isHidden = true case .transitionToOverview, .overview: + os_log("Camera state: overview", log: logger, type: .info) break } } @@ -333,6 +390,7 @@ extension CarPlayManager: CPApplicationDelegate { interfaceController.setRootTemplate(mapTemplate, animated: false) eventsManager.sendCarPlayConnectEvent() + os_log("Did connect CarInterfaceController to window", log: logger, type: .info) subscribeForNotifications() } @@ -351,6 +409,7 @@ extension CarPlayManager: CPApplicationDelegate { carWindow = nil eventsManager.sendCarPlayDisconnectEvent() + os_log("Did disconnect CarInterfaceController to window", log: logger, type: .info) idleTimerCancellable = nil @@ -392,7 +451,7 @@ extension CarPlayManager: CPApplicationDelegate { } else if let mapButtons = browsingMapButtons(for: mapTemplate) { mapTemplate.mapButtons = mapButtons } - + os_log("Did create map template", log: logger, type: .info) return mapTemplate } @@ -407,7 +466,7 @@ extension CarPlayManager: CPApplicationDelegate { } else if let mapButtons = browsingMapButtons(for: mapTemplate) { mapTemplate.mapButtons = mapButtons } - + os_log("Resent pan buttons", log: logger, type: .info) mapTemplate.dismissPanningInterface(animated: false) } } @@ -513,6 +572,7 @@ extension CarPlayManager { name: name) previewRoutes(between: [origin, destination], completionHandler: completionHandler) + os_log("Resent pan buttons", log: logger, type: .info) } /** @@ -522,6 +582,7 @@ extension CarPlayManager { - parameter completionHandler: A closure to be executed when the calculation completes. */ public func previewRoutes(between waypoints: [Waypoint], completionHandler: @escaping CompletionHandler) { + os_log("Previewed routes for a list of waypoint objects", log: logger, type: .info) let options = NavigationRouteOptions(waypoints: waypoints) previewRoutes(for: options, completionHandler: completionHandler) } @@ -534,6 +595,7 @@ extension CarPlayManager { - parameter completionHandler: A closure to be executed when the calculation completes. */ public func previewRoutes(for options: RouteOptions, completionHandler: @escaping CompletionHandler) { + os_log("Calculated routes with given options", log: logger, type: .info) calculate(options) { [weak self] (session, result) in guard let self = self else { completionHandler() @@ -561,6 +623,7 @@ extension CarPlayManager { switch result { case let .failure(error): + os_log("Failed to calculate routes.", log: logger, type: .info) guard let delegate = delegate, let alert = delegate.carPlayManager(self, didFailToFetchRouteBetween: routeOptions.waypoints, @@ -574,6 +637,7 @@ extension CarPlayManager { mapTemplate?.present(navigationAlert: alert, animated: true) return case let .success(response): + os_log("Successfully calculated routes.", log: logger, type: .info) if let traitCollection = (self.carWindow?.rootViewController as? CarPlayMapViewController)?.traitCollection, let interfaceController = interfaceController { @@ -1003,6 +1067,7 @@ extension CarPlayManager { interfaceController.setRootTemplate(mapTemplate, animated: false) eventsManager.sendCarPlayConnectEvent() + os_log("Attach carplay to window", log: logger, type: .info) subscribeForNotifications() } @@ -1023,6 +1088,7 @@ extension CarPlayManager { eventsManager.sendCarPlayDisconnectEvent() idleTimerCancellable = nil + os_log("Detach carplay from window", log: logger, type: .info) unsubscribeFromNotifications() } From 03908fbc5a9844a57fee2dab3d967ff8ac6c1faf Mon Sep 17 00:00:00 2001 From: Jill Cardamon Date: Tue, 14 Dec 2021 10:17:22 -0500 Subject: [PATCH 2/4] Initial logging implementation. --- Sources/MapboxNavigation/CarPlayManager.swift | 67 ++++--------------- .../CarPlayMapViewController.swift | 4 ++ .../CarPlayNavigationViewController.swift | 10 +++ 3 files changed, 28 insertions(+), 53 deletions(-) diff --git a/Sources/MapboxNavigation/CarPlayManager.swift b/Sources/MapboxNavigation/CarPlayManager.swift index e20b69f2ada..5ce0a49e135 100644 --- a/Sources/MapboxNavigation/CarPlayManager.swift +++ b/Sources/MapboxNavigation/CarPlayManager.swift @@ -78,7 +78,7 @@ public class CarPlayManager: NSObject { private weak var navigationService: NavigationService? private var idleTimerCancellable: IdleTimerManager.Cancellable? - private let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "CarPlay") + private let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "CarPlayManager") /** Programatically begins a CarPlay turn-by-turn navigation session. @@ -90,13 +90,12 @@ public class CarPlayManager: NSObject { public func beginNavigationWithCarPlay(using currentLocation: CLLocationCoordinate2D, navigationService: NavigationService) { // Stop the background `PassiveLocationProvider` sending location and heading update `mapView` before turn-by-turn navigation session starts. - os_log("Begin navigation with CarPlay", log: logger, type: .info) if let locationProvider = navigationMapView?.mapView.location.locationProvider { locationProvider.stopUpdatingLocation() locationProvider.stopUpdatingHeading() if let passiveLocationProvider = locationProvider as? PassiveLocationProvider { passiveLocationProvider.locationManager.pauseTripSession() - os_log("Trip session paused", log: logger, type: .info) + os_log("Trip session paused", log: logger, type: .debug) } } @@ -147,7 +146,7 @@ public class CarPlayManager: NSObject { routingProvider: RoutingProvider, eventsManager: NavigationEventsManager? = nil, carPlayNavigationViewControllerClass: CarPlayNavigationViewController.Type? = nil) { - os_log("CarPlayManager initialized", log: logger, type: .info) + self.styles = styles ?? [DayStyle(), NightStyle()] self.routingProvider = routingProvider self.eventsManager = eventsManager ?? .init(activeNavigationDataSource: nil, @@ -165,57 +164,22 @@ public class CarPlayManager: NSObject { selector: #selector(navigationCameraStateDidChange(_:)), name: .navigationCameraStateDidChange, object: carPlayMapViewController?.navigationMapView.navigationCamera) - os_log("Subscribed for notifications", log: logger, type: .info) + os_log("CarPlayManager subscribed for notifications.", log: logger, type: .info) } func unsubscribeFromNotifications() { NotificationCenter.default.removeObserver(self, name: .navigationCameraStateDidChange, object: carPlayMapViewController?.navigationMapView.navigationCamera) - os_log("Unsubscribed for notifications", log: logger, type: .info) - } - - func writeLogEvent() { - // OPEN FILE FOR LOGGING - - os_log("!!! CARPLAY TEST LOG ON ATTACH", - log: logger, - type: .debug) - - let stringToSave = "The string I want to save." - let path = getDocumentDirections() - print("!!! PATH: \(path)") - if let stringData = stringToSave.data(using: .utf8) { - try? stringData.write(to: path) - } - } - - func endLogging() { - // CLOSE FILE FOR LOGGING - - os_log("!!! CARPLAY TEST LOG ON DETACH", - log: logger, - type: .debug) - - let path = getDocumentDirections() - let stringToSave2 = "The SECOND string I want to save." - if let stringData2 = stringToSave2.data(using: .utf8) { - try? stringData2.write(to: path) - } - print("Log can be found here: \(path)") - } - - func getDocumentDirections() -> URL { - return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("carplayTestLog") + os_log("CarPlayManager suspended notifications.", log: logger, type: .info) } + @available(iOS 15.0, *) func getLogEntries() throws -> [OSLogEntryLog] { let logStore = try OSLogStore(scope: .currentProcessIdentifier) let oneHourAgo = logStore.position(date: Date().addingTimeInterval(-3600)) - let allEntries = try logStore.getEntries(at: oneHourAgo) - // Filter the log to be relevant for carplay return allEntries .compactMap { $0 as? OSLogEntryLog } .filter { $0.category == "CarPlay" } @@ -390,7 +354,7 @@ extension CarPlayManager: CPApplicationDelegate { interfaceController.setRootTemplate(mapTemplate, animated: false) eventsManager.sendCarPlayConnectEvent() - os_log("Did connect CarInterfaceController to window", log: logger, type: .info) + os_log("CarInterfaceController did connect to window.", log: logger, type: .info) subscribeForNotifications() } @@ -409,7 +373,7 @@ extension CarPlayManager: CPApplicationDelegate { carWindow = nil eventsManager.sendCarPlayDisconnectEvent() - os_log("Did disconnect CarInterfaceController to window", log: logger, type: .info) + os_log("CarInterfaceController did disconnect from window.", log: logger, type: .info) idleTimerCancellable = nil @@ -451,7 +415,6 @@ extension CarPlayManager: CPApplicationDelegate { } else if let mapButtons = browsingMapButtons(for: mapTemplate) { mapTemplate.mapButtons = mapButtons } - os_log("Did create map template", log: logger, type: .info) return mapTemplate } @@ -466,7 +429,6 @@ extension CarPlayManager: CPApplicationDelegate { } else if let mapButtons = browsingMapButtons(for: mapTemplate) { mapTemplate.mapButtons = mapButtons } - os_log("Resent pan buttons", log: logger, type: .info) mapTemplate.dismissPanningInterface(animated: false) } } @@ -572,7 +534,6 @@ extension CarPlayManager { name: name) previewRoutes(between: [origin, destination], completionHandler: completionHandler) - os_log("Resent pan buttons", log: logger, type: .info) } /** @@ -582,7 +543,6 @@ extension CarPlayManager { - parameter completionHandler: A closure to be executed when the calculation completes. */ public func previewRoutes(between waypoints: [Waypoint], completionHandler: @escaping CompletionHandler) { - os_log("Previewed routes for a list of waypoint objects", log: logger, type: .info) let options = NavigationRouteOptions(waypoints: waypoints) previewRoutes(for: options, completionHandler: completionHandler) } @@ -595,7 +555,6 @@ extension CarPlayManager { - parameter completionHandler: A closure to be executed when the calculation completes. */ public func previewRoutes(for options: RouteOptions, completionHandler: @escaping CompletionHandler) { - os_log("Calculated routes with given options", log: logger, type: .info) calculate(options) { [weak self] (session, result) in guard let self = self else { completionHandler() @@ -623,7 +582,7 @@ extension CarPlayManager { switch result { case let .failure(error): - os_log("Failed to calculate routes.", log: logger, type: .info) + os_log("Failed to calculate routes.", log: logger, type: .debug) guard let delegate = delegate, let alert = delegate.carPlayManager(self, didFailToFetchRouteBetween: routeOptions.waypoints, @@ -637,7 +596,6 @@ extension CarPlayManager { mapTemplate?.present(navigationAlert: alert, animated: true) return case let .success(response): - os_log("Successfully calculated routes.", log: logger, type: .info) if let traitCollection = (self.carWindow?.rootViewController as? CarPlayMapViewController)?.traitCollection, let interfaceController = interfaceController { @@ -813,6 +771,7 @@ extension CarPlayManager: CPMapTemplateDelegate { navigationMapView.removeWaypoints() if let passiveLocationProvider = navigationMapView.mapView.location.locationProvider as? PassiveLocationProvider { passiveLocationProvider.locationManager.resumeTripSession() + os_log("PassiveLocationProvider trip session resumed.", log: logger, type: .info) } delegate?.carPlayManagerDidEndNavigation(self) } @@ -973,6 +932,7 @@ extension CarPlayManager: CarPlayNavigationViewControllerDelegate { interfaceController.dismissTemplate(animated: true) // Unset existing main map template (fixes an issue with the buttons) mainMapTemplate = nil + os_log("CarPlayManager did dismiss arrival UI.", log: logger, type: .info) // Then (re-)create and assign new map template let mapTemplate = previewMapTemplate() @@ -983,6 +943,7 @@ extension CarPlayManager: CarPlayNavigationViewControllerDelegate { if let passiveLocationProvider = navigationMapView?.mapView.location.locationProvider as? PassiveLocationProvider { passiveLocationProvider.locationManager.resumeTripSession() + os_log("PassiveLocationProvider trip session resumed.", log: logger, type: .info) } self.carPlayNavigationViewController = nil @@ -1067,7 +1028,7 @@ extension CarPlayManager { interfaceController.setRootTemplate(mapTemplate, animated: false) eventsManager.sendCarPlayConnectEvent() - os_log("Attach carplay to window", log: logger, type: .info) + os_log("CarPlayManager did connect InterfaceController.", log: logger, type: .info) subscribeForNotifications() } @@ -1088,7 +1049,7 @@ extension CarPlayManager { eventsManager.sendCarPlayDisconnectEvent() idleTimerCancellable = nil - os_log("Detach carplay from window", log: logger, type: .info) + os_log("CarPlayManager did disconnect InterfaceController.", log: logger, type: .info) unsubscribeFromNotifications() } diff --git a/Sources/MapboxNavigation/CarPlayMapViewController.swift b/Sources/MapboxNavigation/CarPlayMapViewController.swift index 9e19ff7c34b..a06db7d52fd 100644 --- a/Sources/MapboxNavigation/CarPlayMapViewController.swift +++ b/Sources/MapboxNavigation/CarPlayMapViewController.swift @@ -2,6 +2,7 @@ import Foundation @_spi(Restricted) import MapboxMaps import MapboxCoreNavigation import MapboxDirections +import os.log #if canImport(CarPlay) import CarPlay @@ -172,6 +173,7 @@ open class CarPlayMapViewController: UIViewController { private var safeTrailingSpeedLimitViewConstraint: NSLayoutConstraint! private var trailingSpeedLimitViewConstraint: NSLayoutConstraint! + private let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "CarPlayMapViewController") // MARK: Initialization Methods @@ -278,12 +280,14 @@ open class CarPlayMapViewController: UIViewController { selector: #selector(didUpdatePassiveLocation), name: .passiveLocationManagerDidUpdate, object: nil) + os_log("CarPlayMapViewController did subscribe to free drive notifications.", log: logger, type: .info) } func unsubscribeFromFreeDriveNotifications() { NotificationCenter.default.removeObserver(self, name: .passiveLocationManagerDidUpdate, object: nil) + os_log("CarPlayMapViewController did unsubscribe from free drive notifications.", log: logger, type: .info) } @objc func didUpdatePassiveLocation(_ notification: Notification) { diff --git a/Sources/MapboxNavigation/CarPlayNavigationViewController.swift b/Sources/MapboxNavigation/CarPlayNavigationViewController.swift index 5442a2972be..7d8b07731f8 100644 --- a/Sources/MapboxNavigation/CarPlayNavigationViewController.swift +++ b/Sources/MapboxNavigation/CarPlayNavigationViewController.swift @@ -2,6 +2,7 @@ import Foundation import MapboxDirections import MapboxCoreNavigation @_spi(Restricted) import MapboxMaps +import os.log #if canImport(CarPlay) import CarPlay @@ -94,6 +95,8 @@ open class CarPlayNavigationViewController: UIViewController, BuildingHighlighti private var safeTrailingCompassViewConstraint: NSLayoutConstraint! private var trailingCompassViewConstraint: NSLayoutConstraint! + + private let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "CarPlayNavigationViewController") func setupOrnaments() { let compassView = CarPlayCompassView() @@ -149,8 +152,10 @@ open class CarPlayNavigationViewController: UIViewController, BuildingHighlighti func updateTripEstimateStyle(_ userInterfaceStyle: UIUserInterfaceStyle) { switch traitCollection.userInterfaceStyle { case .dark: + os_log("TripEstimateStyle set to dark.", log: logger, type: .info) mapTemplate.tripEstimateStyle = .dark default: + os_log("TripEstimateStyle set to default/light.", log: logger, type: .info) mapTemplate.tripEstimateStyle = .light } } @@ -413,6 +418,7 @@ open class CarPlayNavigationViewController: UIViewController, BuildingHighlighti super.traitCollectionDidChange(previousTraitCollection) if previousTraitCollection?.userInterfaceStyle != traitCollection.userInterfaceStyle { + os_log("Trait collection changed.", log: logger, type: .info) updateTripEstimateStyle(traitCollection.userInterfaceStyle) updateManeuvers(navigationService.routeProgress) } @@ -516,6 +522,7 @@ open class CarPlayNavigationViewController: UIViewController, BuildingHighlighti selector: #selector(didUpdateRoadNameFromStatus), name: .currentRoadNameDidChange, object: nil) + os_log("CarPlayNavigationViewController subscribed for notifications.", log: logger, type: .info) } func suspendNotifications() { @@ -542,6 +549,7 @@ open class CarPlayNavigationViewController: UIViewController, BuildingHighlighti NotificationCenter.default.removeObserver(self, name: .currentRoadNameDidChange, object: nil) + os_log("CarPlayNavigationViewController suspended notifications.", log: logger, type: .info) } @objc func visualInstructionDidChange(_ notification: NSNotification) { @@ -648,6 +656,8 @@ open class CarPlayNavigationViewController: UIViewController, BuildingHighlighti let simulatedSpeedMultiplier = notification.userInfo?[MapboxNavigationService.NotificationUserInfoKey.simulatedSpeedMultiplierKey] as? Double else { return } + os_log("Simulation state did change.", log: logger, type: .info) + switch simulationState { case .willBeginSimulation: navigationMapView?.storeLocationProviderBeforeSimulation() From 83782bd3a5c434e370c00a40ef30de2e96fdae0f Mon Sep 17 00:00:00 2001 From: Jill Cardamon Date: Tue, 14 Dec 2021 10:38:08 -0500 Subject: [PATCH 3/4] Replace NSLog with OSLog. --- .../NavigationMapView+RoadNameLabeling.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Sources/MapboxNavigation/NavigationMapView+RoadNameLabeling.swift b/Sources/MapboxNavigation/NavigationMapView+RoadNameLabeling.swift index 4c4d29400ec..8cf35620839 100644 --- a/Sources/MapboxNavigation/NavigationMapView+RoadNameLabeling.swift +++ b/Sources/MapboxNavigation/NavigationMapView+RoadNameLabeling.swift @@ -1,6 +1,9 @@ import MapboxMaps import MapboxDirections import MapboxCoreNavigation +import os.log + +private let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "RoadNameLabeling") extension NavigationMapView { @@ -23,7 +26,7 @@ extension NavigationMapView { do { try mapView.mapboxMap.style.addSource(streetsSource, id: sourceIdentifier) } catch { - NSLog("Failed to add \(sourceIdentifier) with error: \(error.localizedDescription).") + os_log("Failed to add %s with error: %s.", log: logger, type: .error, sourceIdentifier as CVarArg, error.localizedDescription) } } @@ -82,7 +85,7 @@ extension NavigationMapView { try mapView.mapboxMap.style.addLayer(streetLabelLayer, layerPosition: layerPosition) } catch { - NSLog("Failed to add \(roadLabelStyleLayerIdentifier) with error: \(error.localizedDescription).") + os_log("Failed to add %s with error: %s.", log: logger, type: .error, roadLabelStyleLayerIdentifier as CVarArg, error.localizedDescription) } } @@ -164,7 +167,7 @@ extension NavigationMapView { wayNameView.containerView.isHidden = hideWayName case .failure: - NSLog("Failed to find visible features.") + os_log("Failed to find visible features.", log: logger, type: .error) } } } From a3f9f0ae75df778a142a49ae6aa1db22ef702adb Mon Sep 17 00:00:00 2001 From: Jill Cardamon Date: Mon, 18 Apr 2022 12:31:05 -0400 Subject: [PATCH 4/4] Incorporate feedback. --- Sources/MapboxNavigation/CarPlayManager.swift | 12 +++++++++++- ...aySearchController+CPSearchTemplateDelegate.swift | 3 +++ .../MapboxNavigation/CarPlaySearchController.swift | 3 +++ Sources/MapboxNavigation/MapTemplateProvider.swift | 3 +++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Sources/MapboxNavigation/CarPlayManager.swift b/Sources/MapboxNavigation/CarPlayManager.swift index 5ce0a49e135..befec6b805c 100644 --- a/Sources/MapboxNavigation/CarPlayManager.swift +++ b/Sources/MapboxNavigation/CarPlayManager.swift @@ -385,6 +385,7 @@ extension CarPlayManager: CPApplicationDelegate { mapTemplate.mapDelegate = self let currentActivity: CarPlayActivity = .browsing + os_log("CarPlayActivity changed to browsing", log: logger, type: .debug) mapTemplate.userInfo = [ CarPlayManager.currentActivityKey: currentActivity ] @@ -468,9 +469,12 @@ extension CarPlayManager: CPInterfaceControllerDelegate { if let userInfo = template.userInfo as? Dictionary, let currentActivity = userInfo[CarPlayManager.currentActivityKey] as? CarPlayActivity { self.currentActivity = currentActivity + os_log("CarPlayActivity changed", log: logger, type: .debug) } else { self.currentActivity = nil + os_log("CarPlayActivity is nil", log: logger, type: .debug) } + os_log("CarPlayManagerDelegate: template will appear", log: logger, type: .debug) } public func templateDidAppear(_ template: CPTemplate, animated: Bool) { @@ -483,6 +487,7 @@ extension CarPlayManager: CPInterfaceControllerDelegate { let navigationMapView = carPlayMapViewController.navigationMapView navigationMapView.removeRoutes() navigationMapView.removeWaypoints() + os_log("CarPlayManagerDelegate: template did disappear", log: logger, type: .debug) } public func templateWillDisappear(_ template: CPTemplate, animated: Bool) { @@ -494,10 +499,12 @@ extension CarPlayManager: CPInterfaceControllerDelegate { interfaceController.templates.count == 1 else { return } navigationMapView?.navigationCamera.follow() + os_log("CarPlayManagerDelegate: template will disappear", log: logger, type: .debug) } public func templateDidDisappear(_ template: CPTemplate, animated: Bool) { delegate?.carPlayManager(self, templateDidDisappear: template, animated: animated) + os_log("CarPlayManagerDelegate: template did disappear", log: logger, type: .debug) } } @@ -582,7 +589,7 @@ extension CarPlayManager { switch result { case let .failure(error): - os_log("Failed to calculate routes.", log: logger, type: .debug) + os_log("Failed to calculate routes.", log: logger, type: .error) guard let delegate = delegate, let alert = delegate.carPlayManager(self, didFailToFetchRouteBetween: routeOptions.waypoints, @@ -703,6 +710,7 @@ extension CarPlayManager: CPMapTemplateDelegate { mapTemplate.mapDelegate = self let currentActivity: CarPlayActivity = .navigating + os_log("CarPlayActivity changed to navigating", log: logger, type: .debug) mapTemplate.userInfo = [ CarPlayManager.currentActivityKey: currentActivity ] @@ -798,9 +806,11 @@ extension CarPlayManager: CPMapTemplateDelegate { if let carPlayNavigationViewController = carPlayNavigationViewController { currentActivity = .panningInNavigationMode traitCollection = carPlayNavigationViewController.traitCollection + os_log("CarPlayActivity changed to panning in navigation mode", log: logger, type: .debug) } else if let carPlayMapViewController = self.carPlayMapViewController { currentActivity = .panningInBrowsingMode traitCollection = carPlayMapViewController.traitCollection + os_log("CarPlayActivity changed to panning in browsing mode", log: logger, type: .debug) } else { assertionFailure("Panning interface is only supported for free-drive or active-guidance navigation.") return diff --git a/Sources/MapboxNavigation/CarPlaySearchController+CPSearchTemplateDelegate.swift b/Sources/MapboxNavigation/CarPlaySearchController+CPSearchTemplateDelegate.swift index ab227c23122..5030764ea46 100644 --- a/Sources/MapboxNavigation/CarPlaySearchController+CPSearchTemplateDelegate.swift +++ b/Sources/MapboxNavigation/CarPlaySearchController+CPSearchTemplateDelegate.swift @@ -1,6 +1,7 @@ import Foundation import CarPlay import MapboxDirections +import os.log @available(iOS 12.0, *) extension CarPlaySearchController: CPSearchTemplateDelegate { @@ -21,6 +22,7 @@ extension CarPlaySearchController: CPSearchTemplateDelegate { let template = CPListTemplate(title: delegate?.recentSearchText, sections: [section]) template.delegate = self delegate?.pushTemplate(template, animated: true) + os_log("CarPlay search template search button pressed", log: logger, type: .debug) } public func searchTemplateButton(searchTemplate: CPSearchTemplate, @@ -76,6 +78,7 @@ extension CarPlaySearchController: CPListTemplateDelegate { let destinationWaypoint = Waypoint(location: location) delegate?.popTemplate(animated: false) delegate?.previewRoutes(to: destinationWaypoint, completionHandler: completionHandler) + os_log("Search item selected from list", log: logger, type: .debug) return } } diff --git a/Sources/MapboxNavigation/CarPlaySearchController.swift b/Sources/MapboxNavigation/CarPlaySearchController.swift index 4e5f1031a4c..444d54b994f 100644 --- a/Sources/MapboxNavigation/CarPlaySearchController.swift +++ b/Sources/MapboxNavigation/CarPlaySearchController.swift @@ -1,4 +1,5 @@ import Foundation +import os.log /** `CarPlaySearchController` is the main object responsible for managing the search feature on CarPlay. @@ -14,4 +15,6 @@ public class CarPlaySearchController: NSObject { The `CarPlaySearchController` delegate. */ public weak var delegate: CarPlaySearchControllerDelegate? + + let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "CarPlaySearchController") } diff --git a/Sources/MapboxNavigation/MapTemplateProvider.swift b/Sources/MapboxNavigation/MapTemplateProvider.swift index 60fde627d7e..551c132e496 100644 --- a/Sources/MapboxNavigation/MapTemplateProvider.swift +++ b/Sources/MapboxNavigation/MapTemplateProvider.swift @@ -1,7 +1,9 @@ import CarPlay +import os.log @available(iOS 12.0, *) class MapTemplateProvider: NSObject { + private let logger: OSLog = .init(subsystem: "com.mapbox.navigation", category: "MapTemplateProvider") weak var delegate: MapTemplateProviderDelegate? @@ -12,6 +14,7 @@ class MapTemplateProvider: NSObject { mapTemplate.mapDelegate = mapDelegate let currentActivity: CarPlayActivity = .previewing + os_log("CarPlayActivity changed to previewing", log: logger, type: .debug) if let leadingButtons = delegate?.mapTemplateProvider(self, mapTemplate: mapTemplate,