La siguiente es una respuesta limpia y actualizada para Swift 4.x:
A partir de iOS 10, también debe solicitar permiso en el archivo info.plist para evitar un bloqueo:
Privacidad: descripción del uso de la cámara
Debe proporcionar una cadena que se presenta al usuario con esta clave. Si no lo hace, se producirá un accidente al intentar acceder a la cámara.
import AVFoundation
func checkCameraAccess() {
switch AVCaptureDevice.authorizationStatus(for: .video) {
case .denied:
print("Denied, request permission from settings")
presentCameraSettings()
case .restricted:
print("Restricted, device owner must approve")
case .authorized:
print("Authorized, proceed")
case .notDetermined:
AVCaptureDevice.requestAccess(for: .video) { success in
if success {
print("Permission granted, proceed")
} else {
print("Permission denied")
}
}
}
}
func presentCameraSettings() {
let alertController = UIAlertController(title: "Error",
message: "Camera access is denied",
preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Cancel", style: .default))
alertController.addAction(UIAlertAction(title: "Settings", style: .cancel) { _ in
if let url = URL(string: UIApplicationOpenSettingsURLString) {
UIApplication.shared.open(url, options: [:], completionHandler: { _ in
})
}
})
present(alertController, animated: true)
}
Esto probará las cuatro posibles respuestas y luego solicitará permiso si es así notDetermined
, o dirigirá al usuario a la configuración para habilitarlo si lo es denied
. Si es así restricted
, es posible que el usuario actual no pueda habilitarlo, pero debe proporcionarle algún tipo de orientación.