iOS崩溃日志搜集
来源:互联网 发布:乌鲁木齐seo服务 编辑:程序博客网 时间:2024/04/30 04:48
iOS崩溃日志搜集
开发一款APP用户体验可能显得非常重要,想想要是一款APP老是闪退,bug层出不穷,那得多难受,用户肯定会直接卸载掉的。那么为了开发出更加健壮的程序,我们大致有以下方法:
- 充分考虑系统版本之间的差异
- codeReview(包括代码里面多写些安全代码)
- 崩溃日志搜集,更正
说到日志搜集,可以说现在市面上真的是百花齐放百家争鸣,这里就不一一细说啦,其实apple SDK提供了异常捕获的接口的
自己实现异常统计
typedef void NSUncaughtExceptionHandler(NSException *exception);FOUNDATION_EXPORT NSUncaughtExceptionHandler * _Nullable NSGetUncaughtExceptionHandler(void);FOUNDATION_EXPORT void NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler * _Nullable);
我们自己去定义这个NSUncaughtExceptionHandler就可以在异常的时候做出很多操作了,先自己定义一个类HCDCrashLog
// .hFOUNDATION_EXPORT void defalutUncaughtExceptionHandler(NSException * exception);@interface HCDCrashLog : NSObject+ (void)startWithUncaughtExceptionHandler:(NSUncaughtExceptionHandler *)uncaughtExceptionHandler;+ (NSUncaughtExceptionHandler *)getUncaughtExceptionHandler;+ (void)throwException;@end//.m@interface ExceptionInfo : NSObject@property(readonly) NSString *file;@property(readonly) int line;/** the code causes crash. eg '[myArr objectAtIndex:outRangeIndex]' */@property(readonly) NSString *code;@end@implementation ExceptionInfo@endExceptionInfo *getExceptionInfoFromCallStackSymbols(NSArray* callStackSymbols);void defalutUncaughtExceptionHandler(NSException *exception) { NSArray *callStackSymbols = [NSThread callStackSymbols]; NSString * reason = [exception reason]; // NSString * name = [exception name]; NSString * info = [NSString stringWithFormat:@"\n========程序抛出异常========\n\nname:%@\n\nreason:\n%@\n\nuserInfo:\n%@\n\ncallStackSymbols:\n%@",name,reason,[exception userInfo],[callStackSymbols componentsJoinedByString:@"\n"]];#pragma mark - 能否通过代码的形式去定位崩溃位置.... ExceptionInfo *exceptionInfo = getExceptionInfoFromCallStackSymbols(callStackSymbols); DLog(@"%@\n=================%@",info,exception.userInfo);}ExceptionInfo *getExceptionInfoFromCallStackSymbols(NSArray* callStackSymbols){ return nil;}@implementation HCDCrashLog+(void)startWithUncaughtExceptionHandler:(NSUncaughtExceptionHandler *)uncaughtExceptionHandler{ NSSetUncaughtExceptionHandler(defalutUncaughtExceptionHandler);}+(NSUncaughtExceptionHandler *)getUncaughtExceptionHandler{ return NSGetUncaughtExceptionHandler();}+(void)throwException{ NSException *exception = [NSException exceptionWithName:@"测试的异常" reason:@"人为抛出异常" userInfo:nil]; @throw exception;}@end
这样我们就可以在异常的时候将信息传送给服务器或者保存什么的,但是难点在于我们怎么去定位更详细的信息(崩溃的方法、崩溃在哪一行、是什么代码导致崩溃等)源代码在这里,如果有朋友能想到怎么实现的,欢迎指点(好像没办法去做啊,因为dSYM文件在电脑上,我们代码里面只有调用栈信息。另外根据crash文件和dSYM定位请看这里)。 那么既然暂时无法去定位到具体信息,那么我们就要去选择一些三方的平台来统计(大公司大牛多,估计都是自己搞统计)。
Crashlytics崩溃日志统计
说到三方的日志统计,我个人觉得还是Crashlytics最好用,不要问为什么,下面就说一下Crashlytics的方便之处。
Crashlytics使用非常的无脑简单,小白都能轻松集成具体步骤看这里,OC 、swift项目都分得清清楚楚,而且官方还提供了一个Mac APP Fabric帮助用户集成非常方便。上线之后,出现崩溃情况会以邮件的形式发送给你,有木有很开心
邮件里面看起来像这样子
我们需要的信息都有了,还省去我们用crash文件和dSYM去定位的麻烦!赶紧改bug去吧!
另,很好奇大公司怎么做这个,难道用的三方?如果自己做,是怎么从调用栈定位到方法的?可能我想的方向错了吧!
- iOS崩溃日志搜集
- iOS崩溃日志分析及搜集
- iOS崩溃日志分析
- IOS崩溃日志
- iOS崩溃日志分析
- IOS崩溃日志
- IOS 崩溃日志调试
- ios崩溃日志1
- iOS应用崩溃日志
- IOS 崩溃日志探究
- iOS崩溃日志分析
- iOS崩溃日志分析
- iOS 崩溃日志分析
- ios 崩溃日志收集
- iOS崩溃日志分析
- iOS崩溃日志符号化
- 解析iOS崩溃日志
- iOS应用崩溃日志
- netty4内部执行流程
- 字符串编码与Python 3编码
- Uploadify-上传教程
- 2017年3月15日留言 ——关于Java卡Applet系列csdn博文
- Linux环境下一些有用但不常见的命令(二)
- iOS崩溃日志搜集
- IAR的有用的快捷键
- 编程经验:关于OpenCV源码调试的好文章转载~
- 【3 月更新】React Native 优秀开源项目大全
- 【JavaScript】Javascript闭包
- 1265 四点共面(计算几何)
- codevs动态规划 老鼠的旅行
- curl post 接口测试
- PowerShell提取TFS更新记录中的文件列表