求助:Ns游戏冒险岛2闪退问题题

您当前位置: >
> iOS10闪退解决
iOS10闪退解决
来源:程序员人生&& 发布时间: 10:21:07 阅读次数:1396次
升级iOS10以后,在利用访问相册、相机、麦克风、听筒的时候会产生崩溃。例如访问相机的时候xcode打印崩溃信息:
“This app has crashed because it attempted to
privacy-sensitive data without a usage description.& The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the
user how the app uses this data.”
这是由于iOS对隐私权限的配置更加严格。但是我看不出来哪里好了,用着还不方便。
解决办法:
更改info.plist文件,可以直接用文本打开,添加:
&key&NSCameraUsageDescription&/key&
&string&cameraDesciption&/string&
&key&NSContactsUsageDescription&/key&
&string&contactsDesciption&/string&
&key&NSMicrophoneUsageDescription&/key&
&string&microphoneDesciption&/string&
&key&NSPhotoLibraryUsageDescription&/key&
&string&photoLibraryDesciption&/string&
也能够直接在xcode中更改:
这个string是我们开发者给起的1个表示,意思就是能随意写,但是要能表明其含义,它是给用户看的。第1次访问这些外设的时候会弹出提示框,上面就有显示这个string:
其它的权限key:
NSCameraUsageDescription
NSPhotoLibraryUsageDescription
// 麦克风:
NSMicrophoneUsageDescription
NSContactsUsageDescription
NSLocationUsageDescription
NSCalendarsUsageDescription
NSBluetoothPeripheralUsageDescription
// 媒体资料库
NSAppleMusicUsageDescription
// 提示事项
NSRemindersUsageDescription
// 在使用期间访问位置
NSLocationWhenInUseUsageDescription
// 始终访问位置
NSLocationAlwaysUsageDescription
// 运动与健身
NSMotionUsageDescription
更多iOS10的特性参考官方文档:点击打开链接
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
------分隔线----------------------------
------分隔线----------------------------
积分:4237博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)AFNetWorking3.0 配置https闪退问题 - 简书
AFNetWorking3.0 配置https闪退问题
最近在配置https,使用的是AFNetWorking3.0。
一直报个NSArray object nil 闪退,开始找了项目本身的问题,一直找不到。
后来发现,是AFNetWorking里AFSecurityPolicy.m文件中的方法
(BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain,代码片段里
case AFSSLPinningModeCertificate: {
NSMutableArray *Certificates = [NSMutableArray array];
for (NSData *certificateData in self.pinnedCertificates) {
[Certificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)];
SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)Certificates);
if (!AFServerTrustIsValid(serverTrust)) {
return NO;
// obtain the chain after being validated, which *should* contain the pinned certificate in the last position (if it's the Root CA)
NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust);
for (NSData *trustChainCertificate in [serverCertificates reverseObjectEnumerator]) {
if ([self.pinnedCertificates containsObject:trustChainCertificate]) {
return YES;
return NO;
这句代码获取证书的时候获取不到,数组添加了nil object出现了崩溃
[Certificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)];
解决方法:
1.将后端发过来的.crt证书,修改后缀.cer,导入钥匙串
2.再从钥匙串导出该证书,拉到项目里直接使用
AFNetWorking3.0 配置https一直 闪退 AFNetWorking里AFSecurityPolicy.m文件中的方法 - (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSStri...
Why Stock Markets CrashThis page intentionally left blankWhy Stock Markets CrashCritical Events in ComplexFinancial SystemsD i d i e r S ...
原文链接:http://www.tuicool.com/articles/eaiEba3 在我们平时的开发中,对网络连接安全方面所做的努力,应该占据很重要的位置。 在解释AFSecurityPolicy之前,我们先把基础的http/https 知识简单的普及一下。获取这方面...
写在前面: 1.相关https具体内容本篇就不再描述。 2.前几天公司项目要求配置https双向认证,由于是银行业务,证书是cfca(中国金融认证中心)颁发的,因此 在这里我就不描述自签名证书的具体。iOS自签名证书,我没有调试,据说是不认自签名的。自签名证书中,这里有篇博...
写在前面: 1.相关https具体内容本篇就不再描述。 2.前几天公司项目要求配置https双向认证,由于是银行业务,证书是cfca(中国金融认证中心)颁发的,因此 在这里我就不描述自签名证书的具体。iOS自签名证书,我没有调试,据说是不认自签名的。自签名证书中,这里有篇博...
我喜欢在路上走一个人看着太阳看着她从草尖上从羚羊的角弯里从干燥的秸秆上升起我喜欢在路上走我不要帽子不要屋顶不要那重复的墙我不想看见上面的水迹它像噩梦的影子我喜欢在路上走太阳爱我也爱所有的人我渴望成为一片大陆在她的注视下拒绝海洋我喜欢在路上走我喜欢在黄昏的路上看见灯光我喜欢一...
早上起来,她发现家里停电了。于是没办法用热水洗漱,用电吹风吹头发,不能热牛奶,烤面包,只好草草打理一下就出门。
刚走进电梯,邻居家养的小狗一下子冲进来扑住,上周刚买的米白长裙上顿时出现两只黑黑的爪印儿。 开车被警察拦,才想起来今天限行,罚了一百。 到了公司,正好晚了...
育儿,该是顺其天性,还是雷霆手段? 本文的副标题,也可以取为“一次强迫喂奶引发的谴责”。当然,这个案例中,“强迫”,改成“引导”比较妥当,而说“谴责”,也是过于夸张了,夸张了好几倍了。 案例如下: 一、案例 宝宝:2周岁6个月男孩。 今天早上,我儿子喝奶,喝到一半不喝了。从...
可能潮流興追夢,身邊很多朋友都在三十歲前辭職,毅然變換車道追尋第二人生,尤其以做會計的特別多。 最近朋友們都流傳一篇文章,Blogger阿樹深度剖析在Big 4做審計的生活有多慘無人道,旺季工時動輒由早上10點到凌晨2點,做幾年就會捱出一身病痛,又腸胃炎又皮膚病。這位阿樹(...1964人阅读
iOS(319)
iOS8之后当没有开启定位服务时,提示用户点击设置-&隐私-&定位服务 ,但设置程序允许定位会出现闪退问题。
错误原因:iOS8之后,定位功能需要
在plist添加
NSLocationAlwaysUsageDescription
= YES ---& NSLocationAlwaysUsageDescription = 1
NSLocationWhenInUseUsageDescription
= YES ---& NSLocationWhenInUseUsageDescription =
这两个值设成了Boolean类型的,
解决方法:将这两个值类型同时改成NSString即可。下次自动登录
现在的位置:
& 综合 & 正文
ios Crash闪退日志获取和上传至服务器(NSSetUncaughtExceptionHandler)
最近客户有个要求:人家谁谁有crash日志捕获和上传,我们是不是也要做一个...
人家谁谁.....还有什么什么功能........
正好最近也在研究这方面东东,所以整理一下分享给大家:如何用程序获取Crash日志 并 可以上传Crash日志。
首先我们整理经常会闪退的异常哪些:数组越界、空引用、引用未定义方法、内存空间不足等等。
友盟分享后台是可以看到crash的日志,如下图:
开始研究的时候,我有两个疑问:
1.如何获取crash闪退日志(工具和程序两种方法);
2.解析crash;
说明:这里说的crash日志不是在联调的情况下(是生产环境,通俗的说就是发布了的产品)。
如何获取crash闪退日志 -- 工具查看
先看第一个问题如何查看,我搜索的方法有以下几个:
第一个方法:XCode
的菜单Window-&Organizer
选择Devices
选中的手机 -& 点击手机名称左边的箭头 会等到如下图
在右边竖蓝色矩形框中 Type里面出现两种类型:Unknown和Crash 这两种类型分别是 内存不够回收内存kill应用程序导致Crash和程序异常Crash的日志。
上图是我在刚打开日志(立马、马上)截的图,否则过了5秒中,会变成这样(自动解析):
注意对比一下红色框框内容,这个日志也基本上上告诉你crash的原因了。
第二种方法 打开手机 - & 设置 -& 通用 - & 关于本机 - & 诊断与用量 - & 诊断与用量数据
这里面就是所有应用的Crash日志。
第三种方法 通过iTunes Connect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志。方法很多这里不多列了。
参见:http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports )
用程序获取crash日志
但是这里都是工具,没有用到程序获取,经过千方百计的查询(思路是:先找到存放crash的iphone系统路径:var/mobile/Library/Logs/CrashReporter)找到了crash存放的路径,唉,苦于无法读取(用程序读出来都是nil),当然如果是越狱手机就不一样是可以读取的。这个思路断掉了。
换个思路:自己用程序捕获crash,保存到本地可以吗?这么一试,果然........
第一步:新建一个继承自NSObject的类(Xcode新建一个空项目过程略),取名字CatchCrash,在h和m文件中写下:
#import &Foundation/Foundation.h&
@interface CatchCrash : NSObject
void uncaughtExceptionHandler(NSException *exception);
#import "CatchCrash.h"
@implementation CatchCrash
void uncaughtExceptionHandler(NSException *exception)
// 异常的堆栈信息
NSArray *stackArray = [exception callStackSymbols];
// 出现异常的原因
NSString *reason = [exception reason];
// 异常名称
NSString *name = [exception name];
NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];
NSLog(@"%@", exceptionInfo);
NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray];
[tmpArr insertObject:reason atIndex:0];
//保存到本地
当然你可以在下次启动的时候,上传这个log
[exceptionInfo writeToFile:[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]
atomically:YES encoding:NSUTF8StringEncoding error:nil];
第二步:添加一个继承自UIViewcontroller的类,取名字为TestViewController。
第三步:注册CatchCrash异常处理方法,在Appdelegate写下如下代码:
#import "AppDelegate.h"
#import "CatchCrash.h"
#import "TestViewController.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
//注册消息处理函数的处理方法
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
TestViewController *testVc = [[TestViewController alloc] init];
self.window.rootViewController = testVc;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application
第四部:在TestViewController的Xib上面添加一个按钮并给其添加一个单击事件,TestViewController.m文件中有如下代码:
#import "TestViewController.h"
@interface TestViewController ()
@implementation TestViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
#pragma mark - 单击事件
- (IBAction)crashTapped:(id)sender
//常见异常1---不存在方法引用
[self performSelector:@selector(thisMthodDoesNotExist) withObject:nil];
//常见异常2---键值对引用nil
[[NSMutableDictionary dictionary] setObject:nil forKey:@"nil"];
//常见异常3---数组越界
[[NSArray array] objectAtIndex:1];
//常见异常4---memory warning 级别3以上
[self performSelector:@selector(killMemory) withObject:nil];
//其他大家去想吧
#pragma mark - custom method
- (void) killMemory
for (int i = 0; i & 300; i ++)
UILabel *tmpLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
tmpLabel.layer.masksToBounds = YES;
tmpLabel.layer.cornerRadius = 10;
tmpLabel.backgroundColor = [UIColor redColor];
[self.view addSubview:tmpLabel];
运行代码:可以看到闪退,我们用iExplorer打开:
导出error日志,我们可以看到:
Exception reason:NSRangeException
&span style="color:#FF0000;"&Exception name:*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds for empty array&/span&
Exception stack:(
CoreFoundation
0x2f2edfeb &redacted& + 154
libobjc.A.dylib
0x39b66ccf objc_exception_throw + 38
CoreFoundation
0x2f224a89 &redacted& + 176
&span style="color:#FF0000;"& 3
0x000e8077 -[TestViewController crashTapped:] + 126&/span&
0x31b3f057 &redacted& + 90
0x31b3eff7 &redacted& + 30
0x31b3efd1 &redacted& + 44
0x31b2a737 &redacted& + 374
0x31b3ea4f &redacted& + 590
0x31b3e721 &redacted& + 528
0x31b396eb &redacted& + 758
0x31b0e8ed &redacted& + 196
0x31b0cf97 &redacted& + 7102
CoreFoundation
0x2f2b925b &redacted& + 14
CoreFoundation
0x2f2b872b &redacted& + 206
CoreFoundation
0x2f2b6f1f &redacted& + 622
CoreFoundation
0x2f221f0f CFRunLoopRunSpecific + 522
CoreFoundation
0x2f221cf3 CFRunLoopRunInMode + 106
GraphicsServices
0x GSEventRunModal + 138
0x31b6d16d UIApplicationMain + 1136
0x000e810d main + 116
libdyld.dylib
0x3a073ab7 &redacted& + 2
太清楚了,对吧,下次启动应用程序的时候可以把这个error.log(这个名字我临时写的,用什么日期也可以的)上传。可以在日志中加上类似与友盟的
iphone 的UUID、Bundle ID 等等。
现在猜测一下,友盟是不是这么做的呢?
进入一个引用友盟sdk项目的根目录,打开mac终端输入命令 grep -r
NSSetUncaughtExceptionHandler .(这个点不能少或者绝对路径替换这个点),得到如下图:
真的就找到了,什么什么
matches。当然这只是猜测。
更多iOS交流:
【上篇】【下篇】

我要回帖

更多关于 冒险岛闪退问题 的文章

 

随机推荐