Das Folgende ist eine bereinigte Antwort, die für Swift 4.x aktualisiert wurde:
Ab iOS 10 müssen Sie auch die Berechtigung in der Datei info.plist anfordern, um einen Absturz zu vermeiden:
Datenschutz - Beschreibung der Kameranutzung
Sie müssen eine Zeichenfolge angeben, die dem Benutzer mit diesem Schlüssel angezeigt wird. Andernfalls stürzt der Versuch ab, auf die Kamera zuzugreifen.
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)
}
Dadurch werden die vier möglichen Antworten geprüft und dann entweder um Erlaubnis gebeten, falls dies der Fall ist notDetermined
, oder der Benutzer wird zu den Einstellungen weitergeleitet, um sie zu aktivieren, falls dies der Fall ist denied
. Wenn dies restricted
der Fall ist , kann der aktuelle Benutzer es möglicherweise nicht aktivieren, Sie sollten ihm jedoch eine Anleitung geben.