升级 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 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 就可以了
网友评论
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"]];
}
程序 执行的时候 闪退?大神遇到过没有
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.
跪求指教啊,不胜感激
<string>是否允许此App使用你的麦克风?</string>
运行的时候也没有弹出对话框提示是否开启此权限,但是控制台始终出现那条报错信息。
你的应用发布了不?
相机: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)!)
dispatch_async(dispatch_get_main_queue(), ^{
[picker viewDidLayoutSubviews];
});
}]; 我是这样解决的
第一次出现弹出提示是否允许访问相机点击允许之后很长一段时间的黑屏甚至有的时候并不能打开相机 第二次有了授权之后这个黑屏就消失了
出现弹窗点不允许直接就闪退了……
是我少了什么设置吗 相机这个不论点允许还是不允许都有问题 相册就是好用的