【问题标题】:swift ios 9 app not in Settingsswift ios 9 应用程序不在设置中
【发布时间】:2015-11-23 08:02:57
【问题描述】:

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

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


问题

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

  1. 我的应用程序未显示在设置 -> 隐私 -> 相机中
  2. 相机是黑色的
  3. requestAccessForMediaType 未打开弹出窗口
  4. authorizationStatusForMediaType 总是被拒绝

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

我尝试过的事情

  • UIImagePickerController 的子类
  • 删除并重新安装了我的应用
  • 更改了捆绑 ID
  • 将 iphone 日期更改为未来 3 天
  • 在主线程中调用 requestAccessForMediaType

  • Xcode 7
  • ios 9.0 9.1
  • iphone 5、5s、6
  • 斯威夫特 2.1

我的代码

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
                    }
                }
            });
        }

【问题讨论】:

    标签: ios xcode swift ios9 xcode7


    【解决方案1】:

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

    只需为这些设置您的描述字符串即可。

    【讨论】:

    • 非常感谢我没有尝试那个。我将以下代码添加到 info.plist。但仍然没有出现在隐私设置<key>NSCameraUsageDescription</key> <string>Camera</string> <key>NSPhotoLibraryUsageDescription</key> <string>Photos</string> 结果是 AVAuthorizationStatus.NotDetermined 在开始。然后当我用 requestAccessForMediaType 请求许可时,结果是 AVAuthorizationStatus.Denied
    • 感谢您为我指明正确的方向。当我将这些密钥添加到我的项目时,它无法正常工作。所以我创建了新项目并将这些密钥添加到我的项目中,并将 info.plist 文件复制到了我的项目中。
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多