如何解决swift - macOS 应用 CLLocation 无法弹出位置授权窗口
运行代码得到“授权已被拒绝”
基于 macOS 11.2.3
macOS 部署目标:11.1
代码:
import Foundation
import CoreLocation
protocol UserLocationDelegate {
func tracingUserLocation(currentLocation: CLLocation)
}
class UserLocation: NSObject {
static let shared = UserLocation()
var delegate: UserLocationDelegate?
var userCurrentLocation: CLLocationCoordinate2D?
var locationManager: CLLocationManager?
var userCity: String = ""
func locationManagerStart() {
if locationManager == nil {
locationManager = CLLocationManager()
locationManager?.requestAlwaysAuthorization()
locationManager?.distanceFilter = 300
locationManager?.desiredAccuracy = kCLLocationAccuracyBest
locationManager?.delegate = self
}
locationManager?.startUpdatingLocation()
}
func locationManagerStop() {
if locationManager != nil {
locationManager?.stopUpdatingLocation()
}
}
func updataLocation(currentLocation: CLLocation) {
delegate?.tracingUserLocation(currentLocation: currentLocation)
}
}
extension UserLocation: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager,didUpdateLocations locations: [CLLocation]) {
let geoCoder = CLGeocoder()
if let location = locations.last {
// print("current location is : (printing in UserLocation)")
// print(location.coordinate.latitude)
// print(location.coordinate.longitude)
// print(location.altitude)
// print("location coordinate print end here")
updataLocation(currentLocation: location)
userCurrentLocation = location.coordinate
geoCoder.reverseGeocodeLocation(location,completionHandler: {(placemarks,error) in
if let error = error {
print(error)
}
let placeMark = placemarks?.last
if let placeMark = placeMark {
self.userCity = placeMark.locality!
}
})
}
}
func locationManager(_ manager: CLLocationManager,didChangeAuthorization status: CLAuthorizationStatus) {
switch status {
case .notDetermined:
manager.requestAlwaysAuthorization()
case .authorizedAlways:
manager.startUpdatingLocation()
case .restricted:
print("Authorization has ben restricted")
case .denied:
print("Authorization has been denied")
@unkNown default:
break
}
}
func locationManager(_ manager: CLLocationManager,didFinishDeferredUpdatesWithError error: Error?) {
if let error = error {
print(error)
}
}
}
AppDelegate.swift:
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
userLocation.locationManagerStart()
userLocation.delegate = self
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
userLocation.locationManagerStop()
}
信息.plist: ** 我错误地删除了 info.plist 文件并在项目导航栏中重新创建了一个, 这个文件是项目 -> 目标 -> 信息
沙盒:
运行时:
我已经尝试在 info.plist 中添加/删除“隐私 - 位置始终和使用时使用说明”,但在这里没有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。