移动APP中关于crash几乎是0容忍的,那么iOS中会有很多引起crash,比如最常见的数组越界,添加空值。如果你想解决大部分可能引起的crash,保持代码的健壮性,又不想修改太多代码,推荐使用YDAvoidCrashKit
一、CocoaPods 安装
1.在 Podfile 中添加 pod ‘YDAvoidCrashKit’。
2.执行 pod install 或 pod update。(如搜索不到,请更新pod仓库pod repo update)。
3.导入’’YDAvoidCrashKit.h’’。
二、使用
之后在AppDelegate的didFinishLaunchingWithOptions方法中的最初始位置添加如下代码,让YDAvoidCrash生效:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[YDAvoidCrash setAvoidCrashEnableMethodPrefixList:@[@"NS"]];
[YDAvoidCrash setupBlock:^(NSException *exception, NSString *defaultToDo, BOOL upload) {
}];
[YDAvoidCrash becomeAllEffectiveWithLogger:YES];
return YES;
}
三、常见carsh汇总
OB提供的方法并不是健壮的,最常见的,set一个nil or数组越界都会引起crash
NSArray
方法 crash说明 :
- (ObjectType)objectAtIndex:(NSUInteger)index 当index大于数组count的时候引起数组越界
- (NSUInteger)indexOfObject:(ObjectType)anObject 当anObject为nil时carsh
NSMutableArray
方法 crash说明
- (void)addObject:(ObjectType)anObject 当anObject为nil时carsh
- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index 当anObject为nil时carsh,当index>mutArray.count时,会产生越界
- (void)removeObjectAtIndex:(NSUInteger)index 当index>mutArray.count时,会产生越界
NSMutableSet
方法 crash说明
- (void)addObject:(ObjectType)object 当anObject为nil时carsh
NSMutableDictionary
方法 crash说明
- (void)setObject:(ObjectType)anObject forKey:(KeyType)aKey 当anObject为nil时,或key为nil时,都会引起crash
四、YCBStability分类
@interface NSDictionary (YCBStability)
/** 取key对应的字符串 */
- (NSString *)getStringForKey:(id)key;
/** 取key对应的数组 */
- (NSArray *)getArrayForKey:(id)key;
/** 取key对应的字典 */
- (NSDictionary *)getDictinaryForKey:(id)key;
- (int)getIntForKey:(id)key;
- (float)getFloatForKey:(id)key;
- (BOOL)getBoolForKey:(id)key;
@end
五、YCBStability非空判断
@interface YCBNonEmpty : NSObject
/** 判断是否是非空的数组 */
+ (BOOL)isArray:(id)object;
/** 判断是否是非空的集合*/
+ (BOOL)isSet:(id)object;
/** 判断是否是非空的字符串 */
+ (BOOL)isString:(id)text;
/** 判断是否是非空的字典 */
+ (BOOL)isDictionary:(id)object;
@end
总结
release模式虽然规避了Crash,保证了用户体验。但是牺牲了对问题的追踪。未来我希望可以把日志记录到本地,你可以通过项目中已经集成得友盟统计,百度统计,又或者是自己的接口,进行数据上报,追踪问题。
- 本文作者: Grx
- 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2022/06/12/ios防crash崩溃-YDAvoidCrashKit/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!