Пользователи TestFlight не запрашивают и не сохраняют разрешения камеры - PullRequest
2 голосов
/ 19 сентября 2019

У меня есть приложение со встроенным 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.Любая помощь очень ценится.Спасибо!

...