From 2682ac86013084ea0de226b011cdbda089ba1fc3 Mon Sep 17 00:00:00 2001 From: Greg Bolsinga Date: Tue, 22 Apr 2025 09:57:01 -0700 Subject: [PATCH 01/10] Add logging to MapView delegate callbacks and camera updates. - Log MLNMapViewDelegate, UIViewControllerRepresentable, MLNMapViewCameraUpdating callbacks - Assists newcomers to the codebase. --- Sources/InternalUtils/Logger.swift | 7 +++ .../MapLibre/MLNMapViewCameraUpdating.swift | 6 ++- Sources/MapLibreSwiftUI/MapView.swift | 29 ++++++++++- .../MapLibreSwiftUI/MapViewCoordinator.swift | 48 ++++++++++++++++++- .../Models/MapCamera/MapViewCamera.swift | 6 ++- 5 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 Sources/InternalUtils/Logger.swift diff --git a/Sources/InternalUtils/Logger.swift b/Sources/InternalUtils/Logger.swift new file mode 100644 index 0000000..8e4a25d --- /dev/null +++ b/Sources/InternalUtils/Logger.swift @@ -0,0 +1,7 @@ +import os + +public extension Logger { + init(category: String) { + self.init(subsystem: "MapLibre-SwiftUI", category: category) + } +} diff --git a/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift b/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift index 6f76657..fe9dc47 100644 --- a/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift +++ b/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift @@ -26,8 +26,12 @@ public protocol MLNMapViewCameraUpdating: AnyObject { animated: Bool, completionHandler: (() -> Void)? ) + + var activityIdentifier: String { get } } extension MLNMapView: MLNMapViewCameraUpdating { - // No definition + public var activityIdentifier: String { + MapActivity.loggingValue(tag) + } } diff --git a/Sources/MapLibreSwiftUI/MapView.swift b/Sources/MapLibreSwiftUI/MapView.swift index e84d469..1c52f09 100644 --- a/Sources/MapLibreSwiftUI/MapView.swift +++ b/Sources/MapLibreSwiftUI/MapView.swift @@ -1,14 +1,33 @@ import InternalUtils import MapLibre import MapLibreSwiftDSL +import os import SwiftUI +private extension Logger { + static let uiViewControllerRepresentable = Logger(category: "UIViewControllerRepresentable") +} + /// Identifies the activity this ``MapView`` is being used for. Useful for debugging purposes. -public enum MapActivity: Int { +public enum MapActivity: Int, CustomStringConvertible { /// Navigation in a standard window. Default. case standard = 0 /// Navigation in a CarPlay template. case carplay = 2025 + + public var description: String { + switch self { + case .standard: + "standard" + case .carplay: + "carplay" + } + } + + static func loggingValue(_ rawValue: Self.RawValue) -> String { + guard let activity = MapActivity(rawValue: rawValue) else { return String(rawValue) } + return activity.description + } } public struct MapView: UIViewControllerRepresentable { @@ -60,7 +79,9 @@ public struct MapView: UIViewControllerRepresentab } public func makeCoordinator() -> MapViewCoordinator { - MapViewCoordinator( + Logger.uiViewControllerRepresentable + .info("\(#function, privacy: .public), activity: \(activity, privacy: .public)") + return MapViewCoordinator( parent: self, onGesture: { processGesture($0, $1) }, onViewProxyChanged: { onViewProxyChanged?($0) }, @@ -69,6 +90,8 @@ public struct MapView: UIViewControllerRepresentab } public func makeUIViewController(context: Context) -> T { + Logger.uiViewControllerRepresentable + .info("\(#function, privacy: .public), activity: \(activity, privacy: .public)") // Create the map view let controller = makeViewController() controller.mapView.delegate = context.coordinator @@ -104,6 +127,8 @@ public struct MapView: UIViewControllerRepresentab } public func updateUIViewController(_ uiViewController: T, context: Context) { + Logger.uiViewControllerRepresentable + .info("\(#function, privacy: .public), activity: \(activity, privacy: .public)") context.coordinator.parent = self applyModifiers(uiViewController, runUnsafe: true) diff --git a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift index 35954fb..776ec10 100644 --- a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift +++ b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift @@ -1,6 +1,33 @@ import Foundation import MapLibre import MapLibreSwiftDSL +import os + +private extension Logger { + static let mlnMapViewDelegate = Logger(category: "MLNMapViewDelegate") + static let cameraUpdate = Logger(category: "cameraUpdate") +} + +extension MLNCameraChangeReason: CustomStringConvertible { + private static var descriptions: [(Self, String)] = [ + (.programmatic, "programmatic"), + (.resetNorth, "resetNorth"), + (.gesturePan, "gesturePan"), + (.gesturePinch, "gesturePinch"), + (.gestureRotate, "gestureRotate"), + (.gestureZoomIn, "gestureZoomIn"), + (.gestureZoomOut, "gestureZoomOut"), + (.gestureOneFingerZoom, "gestureOneFingerZoom"), + (.gestureTilt, "gestureTilt"), + (.transitionCancelled, "transitionCancelled"), + ] + + public var description: String { + var names = Self.descriptions.filter { contains($0.0) }.map(\.1) + if names.isEmpty { names = ["none"] } + return names.joined(separator: ",") + } +} public class MapViewCoordinator: NSObject, @preconcurrency MLNMapViewDelegate { // This must be weak, the UIViewRepresentable owns the MLNMapView. @@ -65,6 +92,11 @@ public class MapViewCoordinator: NSObject, @precon suppressCameraUpdatePropagation = false } + Logger.cameraUpdate + .info( + "camera: \(camera, privacy: .public) frame: \(NSCoder.string(for: mapView.frame), privacy: .public) animated: \(animated, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" + ) + switch camera.state { case let .centered( onCoordinate: coordinate, @@ -321,7 +353,11 @@ public class MapViewCoordinator: NSObject, @precon // MARK: - MLNMapViewDelegate - public func mapView(_: MLNMapView, didFinishLoading mglStyle: MLNStyle) { + public func mapView(_ mapView: MLNMapView, didFinishLoading mglStyle: MLNStyle) { + Logger.mlnMapViewDelegate + .info( + "\(#function, privacy: .public) style: \(mglStyle, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" + ) addLayers(to: mglStyle) onStyleLoaded?(mglStyle) } @@ -376,7 +412,11 @@ public class MapViewCoordinator: NSObject, @precon } /// The MapView's region has changed with a specific reason. - public func mapView(_ mapView: MLNMapView, regionDidChangeWith reason: MLNCameraChangeReason, animated _: Bool) { + public func mapView(_ mapView: MLNMapView, regionDidChangeWith reason: MLNCameraChangeReason, animated: Bool) { + Logger.mlnMapViewDelegate + .info( + "\(#function, privacy: .public) reason: \(reason, privacy: .public) animated: \(animated, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" + ) // TODO: We could put this in regionIsChangingWith if we calculate significant change/debounce. MainActor.assumeIsolated { // regionIsChangingWith is not called for the final update, so we need to call updateViewProxy @@ -393,6 +433,10 @@ public class MapViewCoordinator: NSObject, @precon @MainActor public func mapView(_ mapView: MLNMapView, regionIsChangingWith reason: MLNCameraChangeReason) { + Logger.mlnMapViewDelegate + .info( + "\(#function, privacy: .public) reason: \(reason, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" + ) if proxyUpdateMode == .realtime { updateViewProxy(mapView: mapView, reason: reason) } diff --git a/Sources/MapLibreSwiftUI/Models/MapCamera/MapViewCamera.swift b/Sources/MapLibreSwiftUI/Models/MapCamera/MapViewCamera.swift index f6181af..bc33920 100644 --- a/Sources/MapLibreSwiftUI/Models/MapCamera/MapViewCamera.swift +++ b/Sources/MapLibreSwiftUI/Models/MapCamera/MapViewCamera.swift @@ -5,7 +5,7 @@ import MapLibre /// The SwiftUI MapViewCamera. /// /// This manages the camera state within the MapView. -public struct MapViewCamera: Hashable { +public struct MapViewCamera: Hashable, CustomStringConvertible { public enum Defaults { public static let coordinate = CLLocationCoordinate2D(latitude: 0, longitude: 0) public static let zoom: Double = 10 @@ -139,4 +139,8 @@ public struct MapViewCamera: Hashable { MapViewCamera(state: .rect(boundingBox: box, edgePadding: edgePadding), lastReasonForChange: .programmatic) } + + public var description: String { + "State: \(state) last: \((lastReasonForChange != nil) ? "\(lastReasonForChange!)" : "nil")" + } } From dbf8d8adf55365ec3186987e7c5e489d2935b0c0 Mon Sep 17 00:00:00 2001 From: Greg Bolsinga Date: Tue, 29 Apr 2025 16:30:42 -0700 Subject: [PATCH 02/10] declare as let --- Sources/MapLibreSwiftUI/MapViewCoordinator.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift index 776ec10..276087d 100644 --- a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift +++ b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift @@ -9,7 +9,7 @@ private extension Logger { } extension MLNCameraChangeReason: CustomStringConvertible { - private static var descriptions: [(Self, String)] = [ + private static let descriptions: [(Self, String)] = [ (.programmatic, "programmatic"), (.resetNorth, "resetNorth"), (.gesturePan, "gesturePan"), From ea4ec58fe66aa142e468ef8f8e4469b23823d53d Mon Sep 17 00:00:00 2001 From: Greg Bolsinga Date: Tue, 29 Apr 2025 16:36:43 -0700 Subject: [PATCH 03/10] Use @retroactive --- Sources/MapLibreSwiftUI/MapViewCoordinator.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift index 276087d..e28424d 100644 --- a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift +++ b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift @@ -8,7 +8,7 @@ private extension Logger { static let cameraUpdate = Logger(category: "cameraUpdate") } -extension MLNCameraChangeReason: CustomStringConvertible { +extension MLNCameraChangeReason: @retroactive CustomStringConvertible { private static let descriptions: [(Self, String)] = [ (.programmatic, "programmatic"), (.resetNorth, "resetNorth"), From 430cebd50fc37d8acb53738f464b73205d279258 Mon Sep 17 00:00:00 2001 From: Greg Bolsinga Date: Tue, 29 Apr 2025 16:42:16 -0700 Subject: [PATCH 04/10] declare @MainActor to remove a warning --- .../Extensions/MapLibre/MLNMapViewCameraUpdating.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift b/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift index fe9dc47..6820076 100644 --- a/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift +++ b/Sources/MapLibreSwiftUI/Extensions/MapLibre/MLNMapViewCameraUpdating.swift @@ -27,7 +27,7 @@ public protocol MLNMapViewCameraUpdating: AnyObject { completionHandler: (() -> Void)? ) - var activityIdentifier: String { get } + @MainActor var activityIdentifier: String { get } } extension MLNMapView: MLNMapViewCameraUpdating { From 134313e8aad1ed7b192f8e5f1c64c77abab7b2f8 Mon Sep 17 00:00:00 2001 From: Greg Bolsinga Date: Tue, 29 Apr 2025 16:45:31 -0700 Subject: [PATCH 05/10] add @MainActor annotations to MLMapView delegate methods --- Sources/MapLibreSwiftUI/MapViewCoordinator.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift index e28424d..0a2e63c 100644 --- a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift +++ b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift @@ -353,6 +353,7 @@ public class MapViewCoordinator: NSObject, @precon // MARK: - MLNMapViewDelegate + @MainActor public func mapView(_ mapView: MLNMapView, didFinishLoading mglStyle: MLNStyle) { Logger.mlnMapViewDelegate .info( @@ -412,6 +413,7 @@ public class MapViewCoordinator: NSObject, @precon } /// The MapView's region has changed with a specific reason. + @MainActor public func mapView(_ mapView: MLNMapView, regionDidChangeWith reason: MLNCameraChangeReason, animated: Bool) { Logger.mlnMapViewDelegate .info( From 806b6906560286b47232d4b135a13ebe0fae39fd Mon Sep 17 00:00:00 2001 From: Greg Bolsinga Date: Wed, 30 Apr 2025 08:35:45 -0700 Subject: [PATCH 06/10] add links to documentation about os.Logger --- Sources/InternalUtils/Logger.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/InternalUtils/Logger.swift b/Sources/InternalUtils/Logger.swift index 8e4a25d..48375d8 100644 --- a/Sources/InternalUtils/Logger.swift +++ b/Sources/InternalUtils/Logger.swift @@ -1,6 +1,10 @@ import os public extension Logger { + /// For more information see: + /// - https://developer.apple.com/documentation/os/viewing-log-messages + /// For even more details see: + /// - https://developer.apple.com/forums/thread/705868 init(category: String) { self.init(subsystem: "MapLibre-SwiftUI", category: category) } From 23d9a05bef6c97f1fa0bd06db3997290bbc683ee Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Thu, 1 May 2025 14:24:01 +0900 Subject: [PATCH 07/10] Update resolved packages --- Package.resolved | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Package.resolved b/Package.resolved index 2fb550f..b6caa1e 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "e5123889438e3e8a4097dfcd17eaffeef3252f808a02de32d517dd5e9c8ead14", + "originHash" : "3ef0341fce60ebda3bd350b1bafb9cebcd8654136f438ae028750da294ee7bf8", "pins" : [ { "identity" : "maplibre-gl-native-distribution", @@ -19,6 +19,15 @@ "version" : "0.3.1" } }, + { + "identity" : "swift-custom-dump", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-custom-dump", + "state" : { + "revision" : "82645ec760917961cfa08c9c0c7104a57a0fa4b1", + "version" : "1.3.3" + } + }, { "identity" : "swift-macro-testing", "kind" : "remoteSourceControl", @@ -33,8 +42,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-snapshot-testing", "state" : { - "revision" : "2e6a85b73fc14e27d7542165ae73b1a10516ca9a", - "version" : "1.17.7" + "revision" : "1be8144023c367c5de701a6313ed29a3a10bf59b", + "version" : "1.18.3" } }, { From 139452525f8be10b78b4eff97197e17b5dc20e2a Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Thu, 1 May 2025 14:24:20 +0900 Subject: [PATCH 08/10] Add missing mock setup --- .../MapViewCoordinatorCameraTests.swift | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Tests/MapLibreSwiftUITests/MapViewCoordinator/MapViewCoordinatorCameraTests.swift b/Tests/MapLibreSwiftUITests/MapViewCoordinator/MapViewCoordinatorCameraTests.swift index d4359c4..1839255 100644 --- a/Tests/MapLibreSwiftUITests/MapViewCoordinator/MapViewCoordinatorCameraTests.swift +++ b/Tests/MapLibreSwiftUITests/MapViewCoordinator/MapViewCoordinatorCameraTests.swift @@ -30,6 +30,10 @@ final class MapViewCoordinatorCameraTests: XCTestCase { animated: .any) .willReturn() + given(maplibreMapView) + .activityIdentifier + .willReturn("standard") + coordinator.updateCamera(mapView: maplibreMapView, camera: camera, animated: false) // Run a second update. We're testing that the snapshotCamera correctly exits the function // when nothing changed. @@ -78,6 +82,10 @@ final class MapViewCoordinatorCameraTests: XCTestCase { animated: .any) .willReturn() + given(maplibreMapView) + .activityIdentifier + .willReturn("standard") + coordinator.updateCamera(mapView: maplibreMapView, camera: newCamera, animated: false) verify(maplibreMapView) @@ -117,6 +125,10 @@ final class MapViewCoordinatorCameraTests: XCTestCase { .setZoomLevel(.any, animated: .any) .willReturn() + given(maplibreMapView) + .activityIdentifier + .willReturn("standard") + coordinator.updateCamera(mapView: maplibreMapView, camera: newCamera, animated: false) verify(maplibreMapView) @@ -156,6 +168,10 @@ final class MapViewCoordinatorCameraTests: XCTestCase { .setZoomLevel(.any, animated: .any) .willReturn() + given(maplibreMapView) + .activityIdentifier + .willReturn("standard") + coordinator.updateCamera(mapView: maplibreMapView, camera: newCamera, animated: false) verify(maplibreMapView) @@ -195,6 +211,10 @@ final class MapViewCoordinatorCameraTests: XCTestCase { .setZoomLevel(.any, animated: .any) .willReturn() + given(maplibreMapView) + .activityIdentifier + .willReturn("standard") + coordinator.updateCamera(mapView: maplibreMapView, camera: newCamera, animated: false) verify(maplibreMapView) From 572209ee70a0fafb59b306f278272a3180ede927 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Thu, 1 May 2025 14:29:01 +0900 Subject: [PATCH 09/10] Update snapshots --- .../__Snapshots__/MapViewCameraTests/testBoundingBox.1.txt | 6 +++--- .../__Snapshots__/MapViewCameraTests/testCenterCamera.1.txt | 4 ++-- .../testTrackUserLocationWithCourse.1.txt | 6 +++--- .../testTrackUserLocationWithHeading.1.txt | 6 +++--- .../MapViewCameraTests/testTrackingUserLocation.1.txt | 6 +++--- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testBoundingBox.1.txt b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testBoundingBox.1.txt index 092ae5f..0ad2c1d 100644 --- a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testBoundingBox.1.txt +++ b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testBoundingBox.1.txt @@ -1,6 +1,4 @@ -▿ MapViewCamera - ▿ lastReasonForChange: Optional - - some: CameraChangeReason.programmatic +▿ State: CameraState.rect(northeast: CLLocationCoordinate2D(latitude: 24.6993808, longitude: 46.7709285), southwest: CLLocationCoordinate2D(latitude: 24.6056011, longitude: 46.67369842529297), edgePadding: UIEdgeInsets(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0)) last: programmatic ▿ state: CameraState ▿ rect: (2 elements) ▿ boundingBox: MLNCoordinateBounds @@ -15,3 +13,5 @@ - left: 20.0 - right: 20.0 - top: 20.0 + ▿ lastReasonForChange: Optional + - some: CameraChangeReason.programmatic diff --git a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testCenterCamera.1.txt b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testCenterCamera.1.txt index 318c577..4f27b21 100644 --- a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testCenterCamera.1.txt +++ b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testCenterCamera.1.txt @@ -1,5 +1,4 @@ -▿ MapViewCamera - - lastReasonForChange: Optional.none +▿ State: CameraState.centered(onCoordinate: CLLocationCoordinate2D(latitude: 12.3, longitude: 23.4), zoom: 5.0, pitch: 12.0, pitchRange: free, direction: 23.0) last: nil ▿ state: CameraState ▿ centered: (5 elements) ▿ onCoordinate: CLLocationCoordinate2D @@ -9,3 +8,4 @@ - pitch: 12.0 - pitchRange: CameraPitchRange.free - direction: 23.0 + - lastReasonForChange: Optional.none diff --git a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithCourse.1.txt b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithCourse.1.txt index f405f82..a04d0dd 100644 --- a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithCourse.1.txt +++ b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithCourse.1.txt @@ -1,6 +1,4 @@ -▿ MapViewCamera - ▿ lastReasonForChange: Optional - - some: CameraChangeReason.programmatic +▿ State: CameraState.trackingUserLocationWithCourse(zoom: (18.0, 0.0, MapLibreSwiftUI.CameraPitchRange.freeWithinRange(minimum: 12.0, maximum: 34.0))) last: programmatic ▿ state: CameraState ▿ trackingUserLocationWithCourse: (3 elements) - zoom: 18.0 @@ -9,3 +7,5 @@ ▿ freeWithinRange: (2 elements) - minimum: 12.0 - maximum: 34.0 + ▿ lastReasonForChange: Optional + - some: CameraChangeReason.programmatic diff --git a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithHeading.1.txt b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithHeading.1.txt index cb5da4b..2eb212b 100644 --- a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithHeading.1.txt +++ b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackUserLocationWithHeading.1.txt @@ -1,8 +1,8 @@ -▿ MapViewCamera - ▿ lastReasonForChange: Optional - - some: CameraChangeReason.programmatic +▿ State: CameraState.trackingUserLocationWithHeading(zoom: (10.0, 0.0, MapLibreSwiftUI.CameraPitchRange.free)) last: programmatic ▿ state: CameraState ▿ trackingUserLocationWithHeading: (3 elements) - zoom: 10.0 - pitch: 0.0 - pitchRange: CameraPitchRange.free + ▿ lastReasonForChange: Optional + - some: CameraChangeReason.programmatic diff --git a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackingUserLocation.1.txt b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackingUserLocation.1.txt index 4252dc9..e549cc9 100644 --- a/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackingUserLocation.1.txt +++ b/Tests/MapLibreSwiftUITests/Models/MapCamera/__Snapshots__/MapViewCameraTests/testTrackingUserLocation.1.txt @@ -1,6 +1,4 @@ -▿ MapViewCamera - ▿ lastReasonForChange: Optional - - some: CameraChangeReason.programmatic +▿ State: CameraState.trackingUserLocation(zoom: (10.0, 0.0, MapLibreSwiftUI.CameraPitchRange.freeWithinRange(minimum: 12.0, maximum: 34.0), 0.0)) last: programmatic ▿ state: CameraState ▿ trackingUserLocation: (4 elements) - zoom: 10.0 @@ -10,3 +8,5 @@ - minimum: 12.0 - maximum: 34.0 - direction: 0.0 + ▿ lastReasonForChange: Optional + - some: CameraChangeReason.programmatic From d9347e4e583258d3f4c4f8ce0fd38dfabfc681b0 Mon Sep 17 00:00:00 2001 From: Greg Bolsinga Date: Thu, 1 May 2025 08:19:55 -0700 Subject: [PATCH 10/10] use debug log level --- Sources/MapLibreSwiftUI/MapView.swift | 6 +++--- Sources/MapLibreSwiftUI/MapViewCoordinator.swift | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Sources/MapLibreSwiftUI/MapView.swift b/Sources/MapLibreSwiftUI/MapView.swift index 1c52f09..e821c6c 100644 --- a/Sources/MapLibreSwiftUI/MapView.swift +++ b/Sources/MapLibreSwiftUI/MapView.swift @@ -80,7 +80,7 @@ public struct MapView: UIViewControllerRepresentab public func makeCoordinator() -> MapViewCoordinator { Logger.uiViewControllerRepresentable - .info("\(#function, privacy: .public), activity: \(activity, privacy: .public)") + .debug("\(#function, privacy: .public), activity: \(activity, privacy: .public)") return MapViewCoordinator( parent: self, onGesture: { processGesture($0, $1) }, @@ -91,7 +91,7 @@ public struct MapView: UIViewControllerRepresentab public func makeUIViewController(context: Context) -> T { Logger.uiViewControllerRepresentable - .info("\(#function, privacy: .public), activity: \(activity, privacy: .public)") + .debug("\(#function, privacy: .public), activity: \(activity, privacy: .public)") // Create the map view let controller = makeViewController() controller.mapView.delegate = context.coordinator @@ -128,7 +128,7 @@ public struct MapView: UIViewControllerRepresentab public func updateUIViewController(_ uiViewController: T, context: Context) { Logger.uiViewControllerRepresentable - .info("\(#function, privacy: .public), activity: \(activity, privacy: .public)") + .debug("\(#function, privacy: .public), activity: \(activity, privacy: .public)") context.coordinator.parent = self applyModifiers(uiViewController, runUnsafe: true) diff --git a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift index 0a2e63c..78fa635 100644 --- a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift +++ b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift @@ -93,7 +93,7 @@ public class MapViewCoordinator: NSObject, @precon } Logger.cameraUpdate - .info( + .debug( "camera: \(camera, privacy: .public) frame: \(NSCoder.string(for: mapView.frame), privacy: .public) animated: \(animated, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" ) @@ -356,7 +356,7 @@ public class MapViewCoordinator: NSObject, @precon @MainActor public func mapView(_ mapView: MLNMapView, didFinishLoading mglStyle: MLNStyle) { Logger.mlnMapViewDelegate - .info( + .debug( "\(#function, privacy: .public) style: \(mglStyle, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" ) addLayers(to: mglStyle) @@ -416,7 +416,7 @@ public class MapViewCoordinator: NSObject, @precon @MainActor public func mapView(_ mapView: MLNMapView, regionDidChangeWith reason: MLNCameraChangeReason, animated: Bool) { Logger.mlnMapViewDelegate - .info( + .debug( "\(#function, privacy: .public) reason: \(reason, privacy: .public) animated: \(animated, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" ) // TODO: We could put this in regionIsChangingWith if we calculate significant change/debounce. @@ -436,7 +436,7 @@ public class MapViewCoordinator: NSObject, @precon @MainActor public func mapView(_ mapView: MLNMapView, regionIsChangingWith reason: MLNCameraChangeReason) { Logger.mlnMapViewDelegate - .info( + .debug( "\(#function, privacy: .public) reason: \(reason, privacy: .public) activity: \(mapView.activityIdentifier, privacy: .public)" ) if proxyUpdateMode == .realtime {