内容简介:保护App,一般常见的问题不会导致闪退,增强App的健壮性,同时会将错误抛出来,根据每个App自身的日志渠道记录,下次迭代或者热修复以下问题.导入是否影响上线App Store
JJException
保护App,一般常见的问题不会导致闪退,增强App的健壮性,同时会将错误抛出来,根据每个App自身的日志渠道记录,下次迭代或者热修复以下问题.
-
Unrecognized Selector Sent to Instance
-
NSArray,NSMutableArray,NSDictonary,NSMutableDictionary
-
KVO
-
Zombie Pointer
-
NSTimer
-
NSNotification
-
NSString,NSMutableString,NSAttributedString,NSMutableAttributedString
如何安装
Podfile
pod 'JJException'
Cartfile
github "jezzmemo/JJException"
手动导入代码
导入 Source
文件夹里所有文件,需要将 MRC
目录下所有.m文件,编译选项更改成-fno-objc-arc
如何使用
- 所有异常的分类,根据自身需要,自由组合
typedef NS_OPTIONS(NSInteger,JJExceptionGuardCategory){ JJExceptionGuardNone = 0, JJExceptionGuardUnrecognizedSelector = 1 << 1, JJExceptionGuardDictionaryContainer = 1 << 2, JJExceptionGuardArrayContainer = 1 << 3, JJExceptionGuardZombie = 1 << 4, JJExceptionGuardKVOCrash = 1 << 5, JJExceptionGuardNSTimer = 1 << 6, JJExceptionGuardNSNotificationCenter = 1 << 7, JJExceptionGuardNSStringContainer = 1 << 8, JJExceptionGuardAllExceptZombie = JJExceptionGuardUnrecognizedSelector | JJExceptionGuardDictionaryContainer | JJExceptionGuardArrayContainer | JJExceptionGuardKVOCrash | JJExceptionGuardNSTimer | JJExceptionGuardNSNotificationCenter | JJExceptionGuardNSStringContainer, JJExceptionGuardAll = JJExceptionGuardUnrecognizedSelector | JJExceptionGuardDictionaryContainer | JJExceptionGuardArrayContainer | JJExceptionGuardZombie | JJExceptionGuardKVOCrash | JJExceptionGuardNSTimer | JJExceptionGuardNSNotificationCenter | JJExceptionGuardNSStringContainer, };
- 设置异常类型并开启
[JJException configExceptionCategory:JJExceptionGuardAll]; [JJException startGuardException];
- 实时关闭保护
[JJException stopGuardException];
- 当异常时,默认程序不会中断,如果需要遇到异常时退出,需要如下设置:
//Default value:NO JJException.exceptionWhenTerminate = YES;
- Zombie使用黑名单机制,只有加入这个名单的才有作用,示例如下:
[JJException addZombieObjectArray:@[TestZombie.class]];
-
如果需要记录日志,只需要实现
JJExceptionHandle
协议,并注册:
@interface ViewController ()<JJExceptionHandle> @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [JJException registerExceptionHandle:self]; } - (void)handleCrashException:(NSString*)exceptionMessage exceptionCategory:(JJExceptionGuardCategory)exceptionCategory extraInfo:(nullable NSDictionary*)info{ }
问题答疑
是否影响上线App Store
不会的,JJException的功能都是使用的官方API,没有任何私有API
保护App的实现技术原理是什么?
JJException是否和Bugly和友盟等第三方库是否有冲突?
Bugly和友盟是记录Crash Bug的log还有一些统计功能,JJException主要是通过Hook技术来实现,所以不会和JJException冲突, 只有一种情况会有冲突,第三方库和JJException,Hook同样的方法,可能导致JJException不起作用
如何上传异常信息到Bugly?
Bugly可以帮我们解决重复信息和CallStack信息,以及状态维护。
实现JJExceptionHandle协议后,将异常信息组织成Error,然后用[Bugly reportError:error]上传异常信息,上传后异常信息Bugly的后台 错误分析
菜单里
TODO(大家记得给我星哦)
- 增强Hook的健壮性
- 支持多平台(Mac OS X,TVOS,WatchOS)
License
JJException is released under the MIT license. See LICENSE for details.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。