Crash监控SDK推荐:腾讯Bugly

腾讯Bugly,为移动开发者提供专业的异常上报和运营统计,帮助开发者快速发现并解决异常,同时掌握产品运营动态,及时跟进用户反馈。

  • 安装 集成 以及注册

SDK下载地址
集成文档地址
其中有很详细的步骤.此处不再赘述

  • BuglyConfig配置

创建一个BuglyConfig对象,并且在调用[Bugly startWithAppId:@"BUGLYID" config:buglyConfig];时传入即可实现对SDK的配置

  • 基本配置

@interface BuglyConfig : NSObject
/**
*  设置自定义版本号
*/
@property (nonatomic, copy) NSString *version;
/**
*  设置自定义设备唯一标识
*/
@property (nonatomic, copy) NSString *deviceIdentifier;
/**
*  Bugly Delegate
*/
@property (nonatomic, assign) id<BuglyDelegate> delegate;

配置version属性为当前App的版本信息,deviceIdentifier为当前的设备标识.可以用于后续在统计日志中查看不同版本的崩溃信息以及根据具体设备标识去定位具体问题

@protocol BuglyDelegate <NSObject>

@optional
/**
*  发生异常时回调
*  @param exception 异常信息
*  @return 返回需上报记录,随异常上报一起上报
*/
- (NSString * BLY_NULLABLE)attachmentForException:(NSException * BLY_NULLABLE)exception;
@end

将BuglyConfig.delegate赋值并且实现了attachmentForException:方法后,可以实现在Bugly上传错误日志时附加我们自己的自定义信息(例如运营商、是否存储空间不足、当前用户的账号状态等等)

@interface Bugly : NSObject
/**
*  设置用户标识
*
*  @param userId 用户标识
*/
+ (void)setUserIdentifier:(NSString *)userId;
/**
*  设置关键数据,随崩溃信息上报
*  @param value KEY
*  @param key VALUE
*/
+ (void)setUserValue:(NSString *)value  forKey:(NSString *)key;
/**
*  上报错误
*  @param error 错误信息
*/
+ (void)reportError:(NSError *)error;

/**
*    @brief 上报自定义错误
*    @param category    类型(Cocoa=3,CSharp=4,JS=5,Lua=6)
*    @param aName       名称
*    @param aReason     错误原因
*    @param aStackArray 堆栈
*    @param info        附加数据
*    @param terminate   上报后是否退出应用进程
*/
+ (void)reportExceptionWithCategory:(NSUInteger)category name:(NSString *)aName reason:(NSString *)aReason callStack:(NSArray *)aStackArray extraInfo:(NSDictionary *)info terminateApp:(BOOL)terminate;

同时.Bugly对象下有一个setUserIdentifier:的类方法.建议在用户登录之后调用,传入用户ID.同样同于后期定位问题使用(最高效率定位日志的手段)
setUserValue:forKey:方法可以设置一些关键数据.会随每次信息上报而上报(相当于简化版的delegate实现)
reportError:以及reportExceptionWithCategory:name:reason:callStack:extraInfo:terminateApp:方法可以实现自定义的错误上报.例如数据错误或者其他超出预期但是不会导致App Crash的问题.

  • Crash配置

@interface BuglyConfig : NSObject
/**
*  卡顿监控开关,默认关闭
*/
@property (nonatomic) BOOL blockMonitorEnable;
/**
*  卡顿监控判断间隔,单位为秒
*/
@property (nonatomic) NSTimeInterval blockMonitorTimeout;

需要开启卡顿监控开关时.需要将BuglyConfig对象的blockMonitorEnable设置为YES.并且设置blockMonitorTimeout的具体值(我设置的是1s).后续即可在监控平台上查找到信息

  • 控制台日志上传

@interface BuglyConfig : NSObject
/**
* 控制自定义日志上报,默认值为BuglyLogLevelSilent,即关闭日志记录功能。
* 如果设置为BuglyLogLevelWarn,则在崩溃时会上报Warn、Error接口打印的日志
*/
@property (nonatomic, assign) BuglyLogLevel reportLogLevel;

typedef NS_ENUM(NSUInteger, BuglyLogLevel) {
   BuglyLogLevelSilent  = 0,
   BuglyLogLevelError   = 1,
   BuglyLogLevelWarn    = 2,
   BuglyLogLevelInfo    = 3,
   BuglyLogLevelDebug   = 4,
   BuglyLogLevelVerbose = 5,
};

默认是不进行上传的,即默认值为BuglyLogLevelSilent.如果需要在Crash时上传日志的功能,只需要将BuglyConfig.reportLogLevel设置为其他枚举即可.建议设置为BuglyLogLevelWarn.即上传Error以及Warning级别的日志.

  • 上传符号表

官方链接
如果方便的话建议配置sh脚本模式.可以实现每次发布时自动上传符号表的功能
但是这个方法有一个限制,就是它可以实现脚本默认在Debug模式及模拟器编译情况下不会上传符号表.但是我日常是真机跑App.所以会导致严重拖慢编译速度.故我使用的方式是删除sh脚本.在每次提交到App Store之后从XCode->Window->Organizer中的Archives中找到包.右键 Show In Finder ,右键xcarchive文件->显示包内容->dSYMs文件夹下的dSYM文件,进入Bugly控制台上传即可

结尾:日志收集的目的是为了查找Crash原因并解决,但最终目的是尽量少的出现Bug.代码中很多问题都可以避免,例如使用runtime的assign修饰引用类型导致的请求不可用的内存,循环引用,服务器给的值可能由空值等,平时多注意一些就可以避免.下一篇文章可能会着重于整个App的性能优化相关,如果大家有相关App优化经验或者想看到哪方面的优化手段希望在评论区讨论

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容