iOS——打开系统设置时的错误信息:_BSMachError

问题描述

在应用中请求定位来获取当前位置的信息,如果用户拒绝了定位,那么需要通过UIAlertController弹出调到系统设置界面来进行授权定位。
代码如下:

if !CLLocationManager.locationServicesEnabled() || CLLocationManager.authorizationStatus() == .denied {
    let alertController = UIAlertController(title: "定位权限被拒绝", message: "请到设置中允许定位", preferredStyle: .alert)
    let setAction = UIAlertAction(title: "设置", style: .default, handler: { (action) in
    UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
    })
    let cancelAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)
    alertController.addAction(cancelAction)
    alertController.addAction(setAction)
    present(alertController, animated: true, completion: nil)
    return
}

在打开系统设置界面的时候,控制台打印了错误信息:

_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)
解决办法

目前的解决办法是,使用多线程来调用:

DispatchQueue.main.async {                    
    UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
}

你可能感兴趣的:(iOS——打开系统设置时的错误信息:_BSMachError)