定位服务 prompt/authorization 未在 macOS 中激活/swift

location services prompt/authorization not activated in macos / swift

无法在 swift 4 中为 macos 应用程序获取当前位置的纬度和经度值,相反,我在控制台中收到一条错误消息

"The connection to service named com.apple.locationd.desktop.synchronous was invalidated." UserInfo={NSDebugDescription=与名为 com.apple.locationd.desktop.synchronous 的服务的连接已失效。}

注册超时,客户端还在注册中!

class ViewController: NSViewController, CLLocationManagerDelegate 
{

let locationManager = CLLocationManager()
}


 override func viewDidLoad(){

       super.viewDidLoad()
      locationManager.delegate = self
       locationManager.desiredAccuracy = kCLLocationAccuracyBest
       locationManager.startUpdatingLocation()
        print (locationManager.location?.coordinate.latitude ?? 0);
        print (locationManager.location?.coordinate.longitude ?? 0);
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
         print (locationManager.location?.coordinate.latitude ?? 0);
         print (locationManager.location?.coordinate.longitude ?? 0);
     }

我还在 info.plist

中启用了隐私检查

我没有在控制台中获取坐标值,而是收到了上述错误消息。在 mac 上启用了定位服务。代码有什么问题?

此错误消息表示应用程序未被授予获取用户位置的权限。要解决此问题,您需要确保应用程序正确 "sandboxed" 并且该位置已启用。您可以在 Xcode 中按照以下步骤执行此操作:

  1. 在项目导航器中,单击应用程序的目标。这应该会弹出一个带有选项卡的视图,例如 "General"、"Capabilities"、"Resource Tags" 等
  2. 单击 "Capabilities" 选项卡。这将为您提供一个项目列表,例如 "App Groups"、"App Sandbox" 等。每个项目都有一个 "On/Off" 按钮。
  3. 打开 "App Sandbox" 项并按左侧的“>”按钮以显示沙盒内容。
  4. 在 "App Data" 部分中,select "Location"。

现在,下次您 运行 您的应用程序时,它会询问用户是否允许它使用当前位置。假设他们的回答是肯定的,您应该不会再看到错误,而是会看到地图上突出显示的当前位置。