requestAccessForMediaType no pide permiso

Noté que mi aplicación no solicita permiso para usar la cámara. Después de experimentar un poco, descubrí que el código utilizado para verificar el permiso tarda mucho tiempo en completarse. Así que pensé en dejar que esa parte de mi viewdidload se ejecute en una cola en serie (sincronización). Obligar al resto a esperar a que se complete el proceso de autenticación antes de comenzar la siguiente línea. Pero eso realmente no funciona. Las líneas comienzan en orden, pero aún no terminan en orden.

Lo extraño es que si solo pido el permiso y no hago nada con él, no completeHandler (como el código a continuación), entonces se ejecuta la segunda vez que lo ejecuto con un completeHandler perfectamente, aunque todavía no muestra una alerta para el usuario. ¿Puede ser esto porque la grabación de video no necesita permiso en Europa?avcapturedevice ref

Si quiero que el código se ejecute línea por línea, ¿debo usar barreras? o sincronizar la cola de serie o ??

AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { nil }())

Actualizar:

Este método debería ser bastante seguro, pero no lo es. Devuelve true por sentado, pero 3 por rawValue (denegado)

func checkForAuthorizationStatus() {
        println("auth me")
        AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: {
            granted in
            if granted {
                println("granted: \(granted)")
                self.deviceAuthorized = true
                println("raw value: \(AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo).rawValue)")
            } else {
                self.deviceAuthorized = false
            }

        })
    }

Actualización 2: responda en los comentarios a continuación. - Restablezca la configuración de privacidad en el dispositivo para obtener la solicitud.

rawValue para autorizado es 3 no 4

Respuestas a la pregunta(1)

Su respuesta a la pregunta