Нижче наведено очищену відповідь, оновлену для Swift 4.x:
Починаючи з iOS 10, ви також повинні запитувати дозвіл у файлі info.plist, щоб уникнути збою:
Конфіденційність - Опис використання камери
Ви повинні надати рядок, який представляється користувачеві з цим ключем. Якщо цього не зробити, це призведе до аварії при спробі отримати доступ до камери.
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)
}
Це перевірить чотири можливі відповіді, а потім або запитайте дозвіл, якщо він є notDetermined
, або направляйте користувача до налаштувань, щоб увімкнути його, якщо він є denied
. Якщо це так restricted
, поточний користувач може не мати можливості його ввімкнути, але ви повинні надати їм певні вказівки.