You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
4.0 KiB
86 lines
4.0 KiB
// |
|
// ABSBootingProtection.h |
|
// AntilockBrakeSystem |
|
// |
|
// Created by 地风(ElonChan) on 16/5/16. |
|
// Copyright © 2016年 Ali. All rights reserved. |
|
// |
|
|
|
#import <Foundation/Foundation.h> |
|
|
|
typedef void (^ABSBoolCompletionHandler)(BOOL succeeded, NSError *error); |
|
typedef void (^ABSRepairBlock)(ABSBoolCompletionHandler completionHandler); |
|
typedef void (^ABSReportBlock)(NSUInteger crashCounts); |
|
|
|
typedef NS_ENUM(NSInteger, ABSBootingProtectionStatus) { |
|
ABSBootingProtectionStatusNormal, /**< APP 启动正常 */ |
|
ABSBootingProtectionStatusNormalChecking, /**< 正在检测是否会在特定时间内是否会 Crash,注意:检测状态下“连续启动崩溃计数”个数小于或等于上限值 */ |
|
ABSBootingProtectionStatusNeedFix, /**< APP 出现连续启动 Crash,需要采取修复措施 */ |
|
ABSBootingProtectionStatusFixing, /**< APP 出现连续启动 Crash,正在修复中... */ |
|
}; |
|
|
|
/** |
|
* 启动连续 crash 保护。 |
|
* 启动后 `_crashOnLaunchTimeIntervalThreshold` 秒内 crash,反复超过 `_continuousCrashOnLaunchNeedToReport` 次则上报日志,超过 `_continuousCrashOnLaunchNeedToFix` 则启动修复操作。 |
|
*/ |
|
@interface ABSBootingProtection : NSObject |
|
|
|
/** |
|
* 启动连续 crash 保护方法。 |
|
* 前置条件:在 App 启动时注册 crash 处理函数,在 crash 时调用[ABSBootingProtection addCrashCountIfNeeded]。 |
|
* 启动后一定时间内(`crashOnLaunchTimeIntervalThreshold`秒内)crash,反复超过一定次数(`continuousCrashOnLaunchNeedToReport`次)则上报日志,超过一定次数(`continuousCrashOnLaunchNeedToFix`次)则启动修复程序;在一定时间内(`crashOnLaunchTimeIntervalThreshold`秒) 秒后若没有 crash 将“连续启动崩溃计数”计数置零。 |
|
`reportBlock` 上报逻辑, |
|
`repairtBlock` 修复逻辑,完成后执行 `[self setCrashCount:0]` |
|
|
|
*/ |
|
- (void)launchContinuousCrashProtect; |
|
|
|
/*! |
|
* 当前启动Crash的状态 |
|
*/ |
|
@property (nonatomic, assign, readonly) ABSBootingProtectionStatus bootingProtectionStatus; |
|
|
|
/*! |
|
* 达到需要执行上报操作的“连续启动崩溃计数”个数。 |
|
*/ |
|
@property (nonatomic, assign, readonly) NSUInteger continuousCrashOnLaunchNeedToReport; |
|
|
|
/*! |
|
* 达到需要执行修复操作的“连续启动崩溃计数”个数。 |
|
*/ |
|
@property (nonatomic, assign, readonly) NSUInteger continuousCrashOnLaunchNeedToFix; |
|
|
|
/*! |
|
* APP 启动后经过多少秒,可以将“连续启动崩溃计数”清零 |
|
*/ |
|
@property (nonatomic, assign, readonly) NSTimeInterval crashOnLaunchTimeIntervalThreshold; |
|
|
|
/*! |
|
* 借助 context 可以让多个模块注册事件,并且事件 block 能独立执行,互不干扰。 |
|
*/ |
|
@property (nonatomic, copy, readonly) NSString *context; |
|
|
|
/*! |
|
* @details 启动后kCrashOnLaunchTimeIntervalThreshold秒内crash,反复超过continuousCrashOnLaunchNeedToReport次则上报日志,超过continuousCrashOnLaunchNeedToFix则启动修复程序;当所有操作完成后,执行 completion。在 crashOnLaunchTimeIntervalThreshold 秒后若没有 crash 将 kContinuousCrashOnLaunchCounterKey 计数置零。 |
|
* @param context 借助 context 可以让多个模块注册事件,并且事件 block 能独立执行,互不干扰。 |
|
*/ |
|
- (instancetype)initWithContinuousCrashOnLaunchNeedToReport:(NSUInteger)continuousCrashOnLaunchNeedToReport |
|
continuousCrashOnLaunchNeedToFix:(NSUInteger)continuousCrashOnLaunchNeedToFix |
|
crashOnLaunchTimeIntervalThreshold:(NSTimeInterval)crashOnLaunchTimeIntervalThreshold |
|
context:(NSString *)context; |
|
/*! |
|
* 当前“连续启动崩溃“的状态 |
|
*/ |
|
+ (ABSBootingProtectionStatus)bootingProtectionStatusWithContext:(NSString *)context continuousCrashOnLaunchNeedToFix:(NSUInteger)continuousCrashOnLaunchNeedToFix; |
|
|
|
/*! |
|
* 设置上报逻辑,参数 crashCounts 为启动连续 crash 次数 |
|
*/ |
|
- (void)setReportBlock:(ABSReportBlock)reportBlock; |
|
|
|
/*! |
|
* 设置修复逻辑 |
|
*/ |
|
- (void)setRepairBlock:(ABSRepairBlock)repairtBlock; |
|
|
|
@end
|
|
|