From 695c90d0e497b80c171075c785c952f0c5ec5bf6 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 22:31:50 +0900 Subject: [PATCH 1/8] Fix lints from the last PR --- .../MapViewCamera/MapViewCameraOperations.swift | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift b/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift index cb04a1d..1f8ce6e 100644 --- a/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift +++ b/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift @@ -19,9 +19,9 @@ public extension MapViewCamera { state = .trackingUserLocationWithHeading(zoom: newZoom, pitch: pitch) case let .trackingUserLocationWithCourse(_, pitch): state = .trackingUserLocationWithCourse(zoom: newZoom, pitch: pitch) - case let .rect(boundingBox, edgePadding): + case .rect(_, _): return - case let .showcase(shapeCollection): + case .showcase(_): return } @@ -44,9 +44,9 @@ public extension MapViewCamera { state = .trackingUserLocationWithHeading(zoom: zoom + increment, pitch: pitch) case let .trackingUserLocationWithCourse(zoom, pitch): state = .trackingUserLocationWithCourse(zoom: zoom + increment, pitch: pitch) - case let .rect(boundingBox, edgePadding): + case .rect(_, _): return - case let .showcase(shapeCollection): + case .showcase(_): return } @@ -60,7 +60,7 @@ public extension MapViewCamera { /// - Parameter newPitch: The new pitch value. mutating func setPitch(_ newPitch: CameraPitch) { switch state { - case let .centered(onCoordinate, zoom, pitch, direction): + case let .centered(onCoordinate, zoom, _, direction): state = .centered(onCoordinate: onCoordinate, zoom: zoom, pitch: newPitch, @@ -71,9 +71,9 @@ public extension MapViewCamera { state = .trackingUserLocationWithHeading(zoom: zoom, pitch: newPitch) case let .trackingUserLocationWithCourse(zoom, _): state = .trackingUserLocationWithCourse(zoom: zoom, pitch: newPitch) - case let .rect(boundingBox, edgePadding): + case .rect(_, _): return - case let .showcase(shapeCollection): + case .showcase(_): return } From 38df025a35e70b9a38ad226adfed77c4a549b89d Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 22:32:01 +0900 Subject: [PATCH 2/8] Fix spelling error in comment --- Sources/MapLibreSwiftUI/StaticLocationManager.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MapLibreSwiftUI/StaticLocationManager.swift b/Sources/MapLibreSwiftUI/StaticLocationManager.swift index ecee763..1bbe6b6 100644 --- a/Sources/MapLibreSwiftUI/StaticLocationManager.swift +++ b/Sources/MapLibreSwiftUI/StaticLocationManager.swift @@ -10,7 +10,7 @@ import MapLibre /// /// You can provide a new location by setting the ``lastLocation`` property. /// -/// This class does not ever perform any authorization checks. That is the responsiblity of the caller. +/// This class does not ever perform any authorization checks. That is the responsibility of the caller. public final class StaticLocationManager: NSObject, @unchecked Sendable { public var delegate: (any MLNLocationManagerDelegate)? From d864213702e53a3280151e700091c034cae53b51 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 22:32:39 +0900 Subject: [PATCH 3/8] Pin Mockable to specific version since subsequent ones are strangely broken --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index b0ba5b1..bc273c8 100644 --- a/Package.swift +++ b/Package.swift @@ -24,7 +24,7 @@ let package = Package( .package(url: "https://github.com/maplibre/maplibre-gl-native-distribution.git", from: "6.1.0"), .package(url: "https://github.com/stadiamaps/maplibre-swift-macros.git", from: "0.0.2"), // Testing - .package(url: "https://github.com/Kolos65/Mockable.git", from: "0.0.2"), + .package(url: "https://github.com/Kolos65/Mockable.git", exact: "0.0.3"), .package(url: "https://github.com/pointfreeco/swift-snapshot-testing", from: "1.15.3"), ], targets: [ From 7b28bd478a5b16d21476bd68a870e55052227a1c Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 22:33:23 +0900 Subject: [PATCH 4/8] Use assumeIsolated as it should be --- Sources/MapLibreSwiftUI/MapViewCoordinator.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift index 5a23041..e3aa43c 100644 --- a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift +++ b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift @@ -251,8 +251,7 @@ extension MapViewCoordinator: MLNMapViewDelegate { return } - // FIXME: CI complains about MainActor.assumeIsolated being unavailable before iOS 17, despite building on iOS 17.2... This is an epic hack to fix it for now. I can only assume this is an issue with Xcode pre-15.3 - Task { @MainActor in + MainActor.assumeIsolated { updateParentCamera(mapView: mapView, reason: reason) } } From 92483955bbffe0b3bea207e06a2924eb1e7cf5c3 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 22:34:07 +0900 Subject: [PATCH 5/8] Run swiftformat --- .../MapViewCamera/MapViewCameraOperations.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift b/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift index 1f8ce6e..a58f330 100644 --- a/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift +++ b/Sources/MapLibreSwiftUI/Extensions/MapViewCamera/MapViewCameraOperations.swift @@ -19,9 +19,9 @@ public extension MapViewCamera { state = .trackingUserLocationWithHeading(zoom: newZoom, pitch: pitch) case let .trackingUserLocationWithCourse(_, pitch): state = .trackingUserLocationWithCourse(zoom: newZoom, pitch: pitch) - case .rect(_, _): + case .rect: return - case .showcase(_): + case .showcase: return } @@ -44,9 +44,9 @@ public extension MapViewCamera { state = .trackingUserLocationWithHeading(zoom: zoom + increment, pitch: pitch) case let .trackingUserLocationWithCourse(zoom, pitch): state = .trackingUserLocationWithCourse(zoom: zoom + increment, pitch: pitch) - case .rect(_, _): + case .rect: return - case .showcase(_): + case .showcase: return } @@ -71,9 +71,9 @@ public extension MapViewCamera { state = .trackingUserLocationWithHeading(zoom: zoom, pitch: newPitch) case let .trackingUserLocationWithCourse(zoom, _): state = .trackingUserLocationWithCourse(zoom: zoom, pitch: newPitch) - case .rect(_, _): + case .rect: return - case .showcase(_): + case .showcase: return } From 99277056aedbc61bbb1ee36ddb75f6cd9f40de87 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 22:37:05 +0900 Subject: [PATCH 6/8] Guess we can't use assumeIsolated yet... --- Sources/MapLibreSwiftUI/MapViewCoordinator.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift index e3aa43c..5a23041 100644 --- a/Sources/MapLibreSwiftUI/MapViewCoordinator.swift +++ b/Sources/MapLibreSwiftUI/MapViewCoordinator.swift @@ -251,7 +251,8 @@ extension MapViewCoordinator: MLNMapViewDelegate { return } - MainActor.assumeIsolated { + // FIXME: CI complains about MainActor.assumeIsolated being unavailable before iOS 17, despite building on iOS 17.2... This is an epic hack to fix it for now. I can only assume this is an issue with Xcode pre-15.3 + Task { @MainActor in updateParentCamera(mapView: mapView, reason: reason) } } From 6af3315921cf6b31af7f9c1ef3e16faec86054c5 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 23:22:32 +0900 Subject: [PATCH 7/8] Make an attribution button control --- Sources/MapLibreSwiftDSL/MapControls.swift | 20 ++++++++++++++++++ Sources/MapLibreSwiftUI/MapView.swift | 4 ++-- .../Examples/MapControlsTests.swift | 19 +++++++++++++++++ .../testAttributionChangePosition.1.png | Bin 0 -> 73336 bytes .../testAttributionOnly.1.png | Bin 0 -> 70816 bytes .../MapControlsTests/testEmptyControls.1.png | Bin 70816 -> 39332 bytes 6 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 Tests/MapLibreSwiftUITests/Examples/__Snapshots__/MapControlsTests/testAttributionChangePosition.1.png create mode 100644 Tests/MapLibreSwiftUITests/Examples/__Snapshots__/MapControlsTests/testAttributionOnly.1.png diff --git a/Sources/MapLibreSwiftDSL/MapControls.swift b/Sources/MapLibreSwiftDSL/MapControls.swift index 6593b6b..4faf02e 100644 --- a/Sources/MapLibreSwiftDSL/MapControls.swift +++ b/Sources/MapLibreSwiftDSL/MapControls.swift @@ -97,6 +97,26 @@ public extension LogoView { } } +public struct AttributionButton: MapControl { + public var position: MLNOrnamentPosition? + public var margins: CGPoint? + public var isHidden: Bool = false + + public func configureMapView(_ mapView: MLNMapView) { + if let position { + mapView.attributionButtonPosition = position + } + + if let margins { + mapView.attributionButtonMargins = margins + } + + mapView.attributionButton.isHidden = isHidden + } + + public init() {} +} + @resultBuilder public enum MapControlsBuilder: DefaultResultBuilder { public static func buildExpression(_ expression: MapControl) -> [MapControl] { diff --git a/Sources/MapLibreSwiftUI/MapView.swift b/Sources/MapLibreSwiftUI/MapView.swift index 5b10d9e..2729f90 100644 --- a/Sources/MapLibreSwiftUI/MapView.swift +++ b/Sources/MapLibreSwiftUI/MapView.swift @@ -13,8 +13,6 @@ public struct MapView: UIViewRepresentable { var onStyleLoaded: ((MLNStyle) -> Void)? public var mapViewContentInset: UIEdgeInsets = .zero - public var isLogoViewHidden = false - public var isCompassViewHidden = false /// 'Escape hatch' to MLNMapView until we have more modifiers. /// See ``unsafeMapViewModifier(_:)`` @@ -23,6 +21,7 @@ public struct MapView: UIViewRepresentable { var controls: [MapControl] = [ CompassView(), LogoView(), + AttributionButton() ] private var locationManager: MLNLocationManager? @@ -104,6 +103,7 @@ public struct MapView: UIViewRepresentable { // Assume all controls are hidden by default (so that an empty list returns a map with no controls) mapView.logoView.isHidden = true mapView.compassView.isHidden = true + mapView.attributionButton.isHidden = true // Apply each control configuration for control in controls { diff --git a/Tests/MapLibreSwiftUITests/Examples/MapControlsTests.swift b/Tests/MapLibreSwiftUITests/Examples/MapControlsTests.swift index 0d087bd..4389911 100644 --- a/Tests/MapLibreSwiftUITests/Examples/MapControlsTests.swift +++ b/Tests/MapLibreSwiftUITests/Examples/MapControlsTests.swift @@ -50,4 +50,23 @@ final class MapControlsTests: XCTestCase { } } } + + func testAttributionOnly() { + assertView { + MapView(styleURL: demoTilesURL) + .mapControls { + AttributionButton() + } + } + } + + func testAttributionChangePosition() { + assertView { + MapView(styleURL: demoTilesURL) + .mapControls { + AttributionButton() + .position(.topLeft) + } + } + } } diff --git a/Tests/MapLibreSwiftUITests/Examples/__Snapshots__/MapControlsTests/testAttributionChangePosition.1.png b/Tests/MapLibreSwiftUITests/Examples/__Snapshots__/MapControlsTests/testAttributionChangePosition.1.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fd6e2f596a8aa55a352e6c4c024cdcbb122679 GIT binary patch literal 73336 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 V-nAYhw=wLW?S{KZ>6>hR{Wq%Q_NV{= literal 0 HcmV?d00001 diff --git a/Tests/MapLibreSwiftUITests/Examples/__Snapshots__/MapControlsTests/testEmptyControls.1.png b/Tests/MapLibreSwiftUITests/Examples/__Snapshots__/MapControlsTests/testEmptyControls.1.png index 22296cee048a86405a0c4dc8a0e0963142303412..80c0081b436932a69659be61cd18ac8e00a667bf 100644 GIT binary patch literal 39332 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 literal 70816 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 V-nAYhw=wLW?S{KZ>6>hR{Wq%Q_NV{= From 50a5fdd476b31297b43d663dcca14f60f64fcc81 Mon Sep 17 00:00:00 2001 From: Ian Wagner Date: Sun, 7 Apr 2024 23:42:31 +0900 Subject: [PATCH 8/8] swiftformat --- Sources/MapLibreSwiftUI/MapView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/MapLibreSwiftUI/MapView.swift b/Sources/MapLibreSwiftUI/MapView.swift index 2729f90..932238c 100644 --- a/Sources/MapLibreSwiftUI/MapView.swift +++ b/Sources/MapLibreSwiftUI/MapView.swift @@ -21,7 +21,7 @@ public struct MapView: UIViewRepresentable { var controls: [MapControl] = [ CompassView(), LogoView(), - AttributionButton() + AttributionButton(), ] private var locationManager: MLNLocationManager?