I need to build SwiftUI app to calculate a distance between my current location and my driver's real-time location. All the drivers' phones will be asked to enable location service when they are in use of this app.
So what I wanted is to get a real-time Longitude and Latitude for a given driver's phone number that registered in this app.
Post
Replies
Boosts
Views
Activity
Environment: Mac OS Sonoma v14.4.1 Xcode 15.3
I'm new to iOS Swift development environment and trying to create a simple app to just return the current location address. I'm testing it with simulator iPhone 15 but the app is not returning any result. Please advise. Here is my code.
import SwiftUI
import CoreLocation
struct CurrentLocationView: View {
@StateObject private var locationManager = LocationManager()
var body: some View {
VStack {
Text("Your Address:")
.font(.title2)
Text(locationManager.address ?? "Locating...")
.multilineTextAlignment(.center)
.padding()
}
.onAppear {
locationManager.requestAuthorization()
}
}
}
class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
private let locationManager = CLLocationManager()
@Published var address: String?
override init() {
super.init()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
}
func requestAuthorization() {
switch locationManager.authorizationStatus {
case .notDetermined:
locationManager.requestWhenInUseAuthorization()
case .authorizedWhenInUse, .authorizedAlways:
locationManager.startUpdatingLocation()
case .denied, .restricted:
// Handle denied or restricted authorization
print("Location services denied")
default:
break
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.first else { return }
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) { [weak self] placemarks, error in
guard let self = self, let placemark = placemarks?.first else { return }
// Extract address components
if let thoroughfare = placemark.thoroughfare, let locality = placemark.locality {
let address = "\(thoroughfare), \(locality)"
self.address = address
} else {
self.address = "Unable to determine address"
}
}
}
}
#Preview {
CurrentLocationView()
}