У меня есть приложение со встроенным QR-сканером, которое можно использовать для сканирования и представления строкового содержимого QR-кодов.Когда приложение впервые запускается на устройстве, оно должно запросить доступ к камере (соответствующим образом включено в info.plist).Вот как это работает, когда я тестирую на своем устройстве, а также когда мой партнер делает на своем (оба внутренних тестера).
Однако после того, как мы выпустили наше приложение для TestFlight, пользователи сообщили, что при первом запуске их не спрашивали о разрешении камеры, и QR-сканер внезапно стал непригодным для наших пользователей TestFlight.
После того, как я заметил эту проблему в TestFlight, я программно добавил запрос разрешений камеры, когда пользователь нажимает кнопку сканера QR, после некоторых предыдущих проблем, опубликованных в Переполнение стека.Это обновление позволило мне запросить у наших пользователей TestFlight разрешение и перейти к настройкам, чтобы разрешить доступ.Однако даже после разрешения доступа камеры к нашему приложению в Настройках приложение все равно не запускает сеанс камеры для пользователей TestFlight, как это происходит в приложениях моего и моего партнера.
'''
func promptForCameraAccess() {
let settingsAppURL = URL(string: UIApplication.openSettingsURLString)!
let alert = UIAlertController(
title: "Need Camera Access",
message: "Camera access is required to use the QR scanner.",
preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "Settings", style: .cancel, handler: { (alert) -> Void in
UIApplication.shared.open(settingsAppURL, options: [:], completionHandler: nil)
}))
present(alert, animated: true, completion: nil)
}
func proceedWithCameraAccess() {
let cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video)
switch cameraAuthorizationStatus {
case .notDetermined: requestCameraPermission()
case .authorized: willPresentQRScanner(true)
case .restricted, .denied: promptForCameraAccess()
@unknown default:
presentCustomAlert(title: "Error", message: "An unknown error occurred. Please try again later.")
}
}
func requestCameraPermission() {
AVCaptureDevice.requestAccess(for: .video, completionHandler: { accessGranted in
guard accessGranted == true else { return }
self.willPresentQRScanner(true)
})
}
'''
Как только приложение распознает разрешение дляКамера, она должна вызвать функцию willPresentQRScanner и показать QR-сканер для пользователя.Вот как это работает на моем устройстве, а также на устройстве моего партнера, но не для пользователей TestFlight.
Я пытаюсь понять, есть ли что-то простое, чего мне не хватает при работе с разрешениями пользователя в TestFlight.Любая помощь очень ценится.Спасибо!