swift ios 9 个应用不在“设置”中

swift ios 9 app not in Settings

我有 swift 在 ios 8 和 xcode 6 上工作的相机代码。 我调用了 AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) 但我的应用程序没有出现在 Settings -> privacy -> Camera (但其他应用程序出现)

更新到ios 9 和xcode 7 后无法获取相机权限工作。 我在 google 和 Whosebug 上搜索了 2 天。


问题

我导入了 AVFoundation 并调用 AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) 总是得到 AVAuthorizationStatus.Denied

  1. 我的应用程序没有出现在设置 -> 隐私 -> 相机中
  2. 相机是黑色的
  3. requestAccessForMediaType 不打开弹出窗口[=52​​=]
  4. authorizationStatusForMediaType 始终被拒绝

主要问题是第一个问题。我想如果我可以在设置 -> 隐私 -> 相机上获取我的应用程序,那么其他问题就解决了。

我试过的东西



我的代码

override func viewDidLoad() {
    super.viewDidLoad()
        cameraView()
}

func checkCamera() {
        let authStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
        switch authStatus {
        case AVAuthorizationStatus.Authorized:
            print("AVAuthorizationStatus.Authorized")
        case AVAuthorizationStatus.Denied:
            print("AVAuthorizationStatus.Denied")
        case AVAuthorizationStatus.NotDetermined:
            print("AVAuthorizationStatus.NotDetermined")
        case AVAuthorizationStatus.Restricted:
            print("AVAuthorizationStatus.Restricted")
        default:
            print("AVAuthorizationStatus.Default")
        }

    }

func cameraView(){
        // session
        let mySession : AVCaptureSession = AVCaptureSession()
        var myDevice : AVCaptureDevice? //= AVCaptureDevice()
        let myImageOutput : AVCaptureStillImageOutput = AVCaptureStillImageOutput()
        let devices = AVCaptureDevice.devices()

        let audioCaptureDevice = AVCaptureDevice.devicesWithMediaType(AVMediaTypeAudio)
        let audioInput = (try! AVCaptureDeviceInput(device: audioCaptureDevice[0] as! AVCaptureDevice))  as AVCaptureInput

        for device in devices {
            if(device.position == AVCaptureDevicePosition.Back){
                myDevice = device as? AVCaptureDevice
            }
        }

        let status = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
        print(status ==  AVAuthorizationStatus.Authorized)
        print(status ==  AVAuthorizationStatus.Denied)
        print(status ==  AVAuthorizationStatus.Restricted)
        print(status.rawValue)

        if status !=  AVAuthorizationStatus.Authorized {

            AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (granted :Bool) -> Void in
                if granted == false {
                    // Camera not Authorized
                    dispatch_async(dispatch_get_main_queue()) {
                        print("Camera not Authorized")
                        self.checkCamera()
                        return
                    }
                }
            });
        }

您需要设置一对新的 Info.plist 值,与位置服务的字符串相同 iOS8:

只需为它们设置描述字符串即可。