应用程序无法访问您的照片或视频iOS 9。

24
当我使用UIImagePicker访问我的照片库来选择照片时,应用程序有时会显示黑屏,有时会显示一个屏幕,表示我必须授予应用程序访问照片的权限。但是当我进入“设置”->“隐私”->“照片”时,没有应用程序出现在那里,也无法在“设置”中找到该应用程序。我读到必须向我的Info.plist添加两个值,但它们也没有起作用。是否有人遇到了同样的错误?我正在使用xcode 7、swift 2.0和iOS 9。

enter image description here

这是我提示用户访问相机权限的地方

@IBAction func cameraButtonPressed(sender: UIButton) {

    let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)

    let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (UIAlertAction) -> Void in
        self.dismissViewControllerAnimated(true, completion: nil)
    }

    let cameraAction = UIAlertAction(title: "Take Photo", style: .Default) { (UIAlertAction) -> Void in
        if UIImagePickerController.availableCaptureModesForCameraDevice(.Rear) != nil {
            self.imagePicker.allowsEditing = false
            self.imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
            self.imagePicker.cameraCaptureMode = .Photo
            self.presentViewController(self.imagePicker, animated: true, completion: nil)
        } else {
            self.noCamera()
        }
    }

    let photoLibraryAction = UIAlertAction(title: "Photo Library", style: .Default) { (UIAlertAction) -> Void in
        self.imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        self.presentViewController(self.imagePicker, animated: true, completion: nil)
    }

    actionSheet.addAction(photoLibraryAction)
    actionSheet.addAction(cameraAction)
    actionSheet.addAction(cancelAction)

    self.presentViewController(actionSheet, animated: true, completion: nil)

}

1
你的应用程序是否实际请求访问权限? - Chris Slowik
@ChrisSlowik 实际上它并没有显示请求权限的对话框。 - Manuel Munoz
你在代码中告诉它了吗?我想知道你做了什么。你没有表明你实际上正在执行请求访问所需的操作,因此很难说出问题出在哪里。如果你没有告诉你的应用程序请求权限,那就是你的问题。否则,你可能有其他问题。 - Chris Slowik
你说:“这就是我提示用户请求相机访问权限的地方”。可我看不到任何代码提示相机访问权限啊。 - Gruntcakes
我曾经问过一个类似的问题,提供了更多的细节,但仍然无法解决:https://dev59.com/XY_ea4cB1Zd3GeqPQJNZ - MC.
我在iOS 10.1模拟器上遇到了同样的问题,任何解决方案都不起作用。 - Castor
7个回答

54
此问题出现在iOS 9中,当您的应用程序Info.plist文件包含一个key:“CFBundleDisplayName”,其值为空字符串时。您可以在那里输入您的应用程序名称,然后它应该可以工作。

2
我已经寻找这个答案很久了。谢谢! - arjunaskykok
2
无法在这里使其工作... 它只要求第一次权限。添加了Bundle显示名称,更改为不同的字符串,甚至为空,删除了应用程序、DerivedData,清理项目,重新启动模拟器。从那时起,无法再次呈现弹出对话框。 - bauerMusic
非常感谢,你是我的英雄! - flo bee
@bauerMusic。你修好问题了吗? - Avijit Nagare
@AvijitNagare 经过进一步阅读,似乎是设计上的问题。在这里打开(更具体地说)https://dev59.com/-ZPfa4cB1Zd3GeqPEYmR#35084315 - bauerMusic
显示剩余2条评论

7
在info.plist中,“Bundle display name”字段不能为空。
示例: 链接

5
如果您看到这个屏幕,可能有以下原因和解决方案:
1. 如果您没有获取访问权限的提示。
解决方案: 1. 添加“CFBundleDisplayName”及其值,作为应用程序标题或任何其他名称。 2. 在info.plist文件中添加“NSPhotoLibraryUsageDescription”。
2. 检查您的设置 -> 隐私 -> 照片,隐私是否被禁用或启用。
解决方案:启用照片隐私设置。
3. 如果您正在模拟器上工作,并且已经添加了CFBundleDisplayName但没有收到照片访问提示。
解决方案:确保您使用的Xcode必须在“应用程序文件夹”中以获得许可访问提示。

请确保您使用的Xcode必须位于应用程序文件夹中,以获取权限访问警报,这拯救了我的一天。谢谢。 - AITAALI_ABDERRAHMANE
什么?!应用程序文件夹中的XCode与实际的iOS设备有什么关系?! - Yaroslav Dukal

1
我知道这是一个老问题,但还有一个最后的技巧要提供...
在尝试了上述建议之后,我仍然在运行iOS 9.3的iPod touch上遇到了相机、照片、音乐库权限问题。在“设置应用程序 > 隐私 > 照片”中没有列出任何应用程序(相机和媒体库的“隐私”也没有),设置应用程序中也没有我的应用程序行,因此客户无法更改我的应用程序的隐私权限。
解决方案是打开“设置应用程序 > 通用 > 重置”,然后点击“重置位置和隐私”。显然,我的设备隐私设置已经出现了某些问题。重置后,所有这些问题都得到了解决。

1

对于那些在iOS 10中仍然遇到此错误的人,这是由于iOS 10实施了新的隐私设置。

基本上,在Info.plist中,您必须说明为什么要访问照片库,通过设置Privacy - Photo Library Usage Description键来解决问题(注意,这可以留空)。

更多信息请参见: http://useyourloaf.com/blog/privacy-settings-in-ios-10/


1

iOS10中,在info.plist文件中:

"CFBundleDisplayName"字段中输入你的应用名称。

<key>CFBundleDisplayName</key>
<string>IMS Food-taxi</string> 

并添加“NSPhotoLibraryUsageDescription”说明

<key>NSPhotoLibraryUsageDescription</key>
<string>you will need to give the app permission to use the Photos.</string>

它只会在第一次询问我,但如果被拒绝并再次请求,它将永远不会再次询问... - Yaroslav Dukal

0

非常简单,

只需要进入

模拟器 -> 硬件 -> 主页

然后在手机设置中 -> 在您的应用程序中 -> 现在允许通过移动开关选项(如下图所示)进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接