Mac CoreLocation Services不会要求权限

Rya*_*ols 8 macos cocoa core-location

我正在编写一个需要使用CoreLocation服务的Mac App.只要我在安全首选项窗格中手动验证服务,代码和位置就可以正常工作.但是,框架不会自动弹出权限对话框.文件说明:

重要信息用户可以选择拒绝应用程序访问位置服务数据.在应用程序初次使用期间,Core Location框架会提示用户确认使用位置服务是可以接受的.如果用户拒绝该请求,则CLLocationManager对象会在将来的请求期间向其委托报告相应的错误.

我确实得到了我的委托的错误,并且+ locationServicesEnabled的值在CLLocationManager上是正确的.缺少的唯一部分是向用户提示有关权限的提示.这发生在我的开发MPB和朋友MBP上.我们俩都不知道什么是错的.

有没有人碰到这个?

相关代码:

_locationManager = [CLLocationManager new];    
[_locationManager setDelegate:self];
[_locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer];
...
[_locationManager startUpdatingLocation];
Run Code Online (Sandbox Code Playgroud)

Dig*_*ory 4

我发现在 Mac 上,当您通过调用启动位置服务时

[locationManager startUpdatingLocation];
Run Code Online (Sandbox Code Playgroud)

它触发

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
Run Code Online (Sandbox Code Playgroud)

状态为

kCLAuthorizationStatusNotDetermined
Run Code Online (Sandbox Code Playgroud)

如果您观察此状态,然后再次开始更新位置,它会触发权限对话框:例如

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    switch (status) {
        case kCLAuthorizationStatusAuthorized:
            NSLog(@"Location Services are now Authorised");
            [_locationManager startUpdatingLocation];

            break;

        case kCLAuthorizationStatusDenied:
            NSLog(@"Location Services are now Denied");
            break;

        case kCLAuthorizationStatusNotDetermined:
            NSLog(@"Location Services are now Not Determined");

            //  We need to triger the OS to ask the user for permission.
            [_locationManager startUpdatingLocation];
            [_locationManager stopUpdatingLocation];

            break;

        case kCLAuthorizationStatusRestricted:
            NSLog(@"Location Services are now Restricted");
            break;

        default:
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)