import CoreLocation import MapKit import SwiftUI import UIKit struct AttachmentLocationPickerView: View { @StateObject private var locationManager = LocationManager() @State private var region = MKCoordinateRegion( center: CLLocationCoordinate2D(latitude: 34.011_286, longitude: -116.166_868), span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2) ) @State private var showingAlert = false var body: some View { MapView(coordinateRegion: $region) .onAppear { locationManager.start() } .onChange(of: locationManager.lastLocation) { newLocation in if let newLocation { region.center = newLocation.coordinate } } .onChange(of: locationManager.authorizationStatus) { newStatus in if newStatus == .denied { showingAlert = true } } .alert(isPresented: $showingAlert) { Alert( title: Text("Location Permission Denied"), message: Text("Please enable location permissions in settings."), dismissButton: .default(Text("OK")) { openAppSettings() } ) } } } class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate { private let locationManager = CLLocationManager() @Published var lastLocation: CLLocation? @Published var authorizationStatus: CLAuthorizationStatus override init() { authorizationStatus = locationManager.authorizationStatus super.init() locationManager.delegate = self } func start() { locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() } func locationManager(_: CLLocationManager, didUpdateLocations locations: [CLLocation]) { lastLocation = locations.first } func locationManager(_: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { authorizationStatus = status } } struct MapView: UIViewRepresentable { @Binding var coordinateRegion: MKCoordinateRegion func makeUIView(context: Context) -> MKMapView { let mapView = MKMapView() mapView.delegate = context.coordinator return mapView } func updateUIView(_ uiView: MKMapView, context _: Context) { uiView.setRegion(coordinateRegion, animated: true) } func makeCoordinator() -> Coordinator { Coordinator(self) } class Coordinator: NSObject, MKMapViewDelegate { var parent: MapView init(_ parent: MapView) { self.parent = parent } func mapView(_ mapView: MKMapView, regionDidChangeAnimated _: Bool) { parent.coordinateRegion = mapView.region } } }