ReviewOS

also looking at this

craft-native/craft

feat(maps): add key-free native Android maps and shared map controls

#363
Merged chris wants to merge codex/wildloop-native-map-providers into main
28 files +1857 -481

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

packages/ios/fixtures/native-screen/NativeRenderUnitTests.swiftmodified+3-1
Changes to packages/ios/fixtures/native-screen/NativeRenderUnitTests.swift
@@ -709,7 +709,9 @@ final class NativeRenderUnitTests: XCTestCase {
709709 XCTAssertEqual(map.camera.pitch, 30, accuracy: 1)
710710 let annotation = try XCTUnwrap(map.annotations.first)
711711 let marker = try XCTUnwrap(map.delegate?.mapView?(map, viewFor: annotation))
712 XCTAssertNotNil(marker.image)
712 let image = try XCTUnwrap(marker.image)
713 XCTAssertEqual(image.renderingMode, .alwaysOriginal, "MapKit must preserve the arrow's contrasting palette")
714 XCTAssertLessThanOrEqual(image.size.width, 24, "Direction signs must leave the route visible in compact maps")
713715 XCTAssertEqual(marker.accessibilityIdentifier, "direction")
714716 XCTAssertEqual(marker.transform.b, 1, accuracy: 0.02)
715717 }
packages/ios/templates/CraftNativeScreen.swiftmodified+5-2
Changes to packages/ios/templates/CraftNativeScreen.swift
@@ -1411,9 +1411,12 @@ private final class CraftNativeMapView: MKMapView, MKMapViewDelegate {
14111411
14121412 private func configureMarkerView(_ view: MKAnnotationView, id: String) {
14131413 if let bearing = markerBearings[id] {
1414 let configuration = UIImage.SymbolConfiguration(pointSize: 24, weight: .semibold)
1414 let configuration = UIImage.SymbolConfiguration(pointSize: 16, weight: .semibold)
14151415 .applying(UIImage.SymbolConfiguration(paletteColors: [.white, .systemGreen]))
1416 view.image = UIImage(systemName: "arrow.up.circle.fill", withConfiguration: configuration)
1416 // MapKit otherwise tints this as a monochrome template and loses
1417 // the contrasting route arrow when displayed over map content.
1418 view.image = UIImage(systemName: "arrow.up.circle.fill", withConfiguration: configuration)?
1419 .withRenderingMode(.alwaysOriginal)
14171420 view.transform = CGAffineTransform(rotationAngle: CGFloat((bearing - camera.heading) * .pi / 180))
14181421 } else {
14191422 view.image = UIImage(systemName: "mappin.circle.fill", withConfiguration: UIImage.SymbolConfiguration(pointSize: 28))?