iOS 10 开发适配系列 之 权限Crash问题

作者: wzbdroid | 来源:发表于2016-06-17 16:50 被阅读87917次

升级 iOS 10 之后目测坑还是挺多的,记录一下吧,看看到时候会不会成为一个系列。

直入正题吧

今天在写 Swift 3 相关的一个项目小小练下手,发现调用相机,崩了。试试看调用相册,又特么崩了。然后看到控制台输出了以下信息:
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.

意思就是说,你需要在 info.plist 文件添加一个 NSPhotoLibraryUsageDescription的 key,然后添加一个描述。

解决方案
1.在项目中找到info.plist文件,右键点击以 Source Code形式打开
2.添加以下键值对,这里以 PhotoLibrary 作为例子

    <key>NSPhotoLibraryUsageDescription</key>
    <string>此 App 需要您的同意才能读取媒体资料库</string>

注意,key 是绝对不能写错的,

而 value 也就是<string></string>你可以随意写

附图


iOS 10 开发适配系列 之 权限Crash问题

目测所有需要的权限描述都会在 iOS 10 beta里面crash,不用怕,控制台会有输出的,自行添加就 OK,我另外附送几个 key/value 给你们

    <key>NSCameraUsageDescription</key>    
    <string>cameraDesciption</string>
    
    <key>NSContactsUsageDescription</key>    
    <string>contactsDesciption</string>
   
    <key>NSMicrophoneUsageDescription</key>    
    <string>microphoneDesciption</string>

嗯,然后 clean 一下,重新运行。

当然我比较推荐的做法是直接
info.plist 还是用 Property List 的形式,然后点击添加, 就是滑动到最后一个 item 会出现一个小加号
输入 Privacy 可以迅速定位到这一权限系列,找到你需要的权限,修改后面的 value 就可以了

相关文章

网友评论

  • 976dddb20236:通知的key是什么 大神
  • 十年啊:求 demo 1061049081@qq.com 最新版的SDK 按照说的做不行啊
  • 我的时代我开创:我原先提示是需要增加一NSLocationWhenInUseUsageDescription,但是我增加了,还是报错误,还是提示需要添加NSLocationWhenInUseUsageDescription,这是为什么?
  • 七月不下雨: if ([self isIOS10OrHigh]) {

    NSDictionary * option = [[NSMutableDictionary alloc] init];
    [option setValue:UIApplicationOpenURLOptionsSourceApplicationKey forKey:APPIDENTIFIER];
    NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    // if ([[UIApplication sharedApplication] openURL:url]) {
    [[UIApplication sharedApplication] openURL:url options:option completionHandler:nil];
    // }
    }else{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];
    }

    程序 执行的时候 闪退?大神遇到过没有
  • 韩叨叨:修改后,clean一下是什么意思?
  • 788d687a2e54:请问楼主,为什么我在info.plist里面添加了NSMicrophoneUsageDescription权限,但是依旧在控制台出现以下问题:
    This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.
    跪求指教啊,不胜感激
    wzbdroid:@Andy_Happy 试试重新装,应该不会出现这种问题吧
    788d687a2e54:@wzbdroid value里就随便输了几个字,<key>NSMicrophoneUsageDescription</key>
    <string>是否允许此App使用你的麦克风?</string>
    运行的时候也没有弹出对话框提示是否开启此权限,但是控制台始终出现那条报错信息。 :sob:
    wzbdroid:@Andy_Happy value空了吗?
  • Mr___Right:我是往相册中保存图片的时候报错,谢谢你的帮助
  • ibiaoma:我的不需要后台也定位,所以只设置了Privacy - Location When In Use Usage Description,但是调试的时候,一直打印This app has attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSLocationAlwaysUsageDescription key with a string value explaining to the user how the app uses this data。这个怎么搞?而且听说如果要是一直请求定位的话,审核会被拒绝。
    言子玉:@ibiaoma plist文件中加了一直访问位置的描述,但是代码中没有去调用requestAlwaysAuthorization这个方法 (不管第三方是否调用了此方法),是这样?
    你的应用发布了不?
    ibiaoma:@zPaul 你是不是用了某些第三方才这样的?(我是因为用了爱贝支付,它需要实时统计支付地区),我的解决办法是将请求位置的代码写到程序启动的时候(我的是引导页),用使用时访问位置的弹框替换一直使用位置的弹框,这样会弹出是否在使用时访问位置,而不是一直访问位置,但实际上我还是在plist中配置了一直访问位置的权限,只不过没有一直使用请求定位。
    言子玉:@ibiaoma 我也遇到同样的问题 , 请问 你是怎么解决的?
  • 司机王:您好,问下 这个东西的多语言怎么做?
    cc_Jumper:@司机王 难道一定要把这个弹窗放在代码中才能支持多语言吗,ios官方有提供国际化的地方吗? 后面你有研究么 :blush:
  • 愿记花开不记年:还有 获取device token的时候 跟之前也不一样了
  • 郑明明:iOS10真的烦
  • 郑明明:遇到这个问题了
  • 48170bbd908d:Value  的提示信息必须写么?
  • KayMo:如何在工程里判断多媒体权限是否打开?
    fdb60a43418c:@kaka_09 我这有相册和相机的:相册import Photo,相机import AVFoundation.
    相机:let authStatus:AVAuthorizationStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)
    if (authStatus == .denied || authStatus == .restricted){
    //没有权限
    }else{
    //有权限
    }
    相册:let library:PHAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
    if(library == .denied || library == .restricted){
    //没有
    }else{
    //有
    }
    跳转设置页面:UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
  • 2cadf0a1a3f5:我发现,iOS10环境下定位权限提示框不见了,默认打开了?
    愿记花开不记年:@唯的执著 我的有提示框
  • 这个夏天有点冷:iOS10环境下,横屏调用相机,首次会询问是否允许,点击允许后会出现卡屏现象,这个是系统问题吗?
    simpletonking:@这个夏天有点冷 good job! :smile:
    这个夏天有点冷:@simpletonking 我解决了,present进入相机的时候,有个回调方法, [self presentViewController:picker animated:YES completion:^{
    dispatch_async(dispatch_get_main_queue(), ^{
    [picker viewDidLayoutSubviews];
    });
    }]; 我是这样解决的
    simpletonking:@这个夏天有点冷 哎 也一样碰到了
  • vincent涵:请问推送需不需要配置?
    若雨千寻:@光脚的的羊爸爸 我现在项目有几个地方也是alertview奔溃,是什么原因啊?
    1b9fdb714eb2:@__时光__ 多谢:pray: 不是推送的问题,是一个第三方库
    1b9fdb714eb2:@__时光__ 注册推送弹出Alert,点击确认就闪退了~
  • df0fa4542909:如果有这个问题的话,之前已经上线的版本到时候需要升级嘛?
  • betterton:您好 我这边遇到了一个问题不知道你有没有这中情况
    第一次出现弹出提示是否允许访问相机点击允许之后很长一段时间的黑屏甚至有的时候并不能打开相机 第二次有了授权之后这个黑屏就消失了
    出现弹窗点不允许直接就闪退了……
    是我少了什么设置吗 相机这个不论点允许还是不允许都有问题 相册就是好用的
    betterton:@betterton 我想问一下 用户点击允许之后是会自动打开摄像头的吗 我可以获取到点击允许和不允许这个事件吗
    betterton:@wzbdroid 觉得这个问题很迷……并不知道哪里出了问题
    wzbdroid:@betterton 😳暂时没有诶,回头我再看看
  • 271c92f8e505:iOS10 中默认程序在 wifi 设置里的 app using WLAN&Cellular 中的权限都是关闭的,很蛋疼。
    红鲤鱼蓝鲤鱼与驴:@cntrumpV 如果不设置的话就app就不能联网么?那么网络连接的权限怎么设置啊。。。
    wzbdroid:@cntrumpV 我一直觉得这个应该在project里的capabilities里面一起配置

本文标题:iOS 10 开发适配系列 之 权限Crash问题

本文链接:https://www.haomeiwen.com/subject/joevdttx.html