AvoidCrash的集成注意事項(xiàng)库菲、疑惑的解答

很多開發(fā)小伙伴們經(jīng)常私信問我一些問題:

1、若集成了騰訊Bugly或者友盟等等異常搜集的SDK,AvoidCrash會(huì)影響到它們的異常搜集嗎志膀?

2鳖擒、為什么集成了AvoidCrash還是會(huì)報(bào)unrecognized selector sent to instance的異常蒋荚?

疑惑1

1惊奇、若集成了騰訊Bugly或者友盟等等異常搜集的SDK,AvoidCrash會(huì)影響到它們的異常搜集嗎播赁?

首先要清楚的一點(diǎn)是容为,對(duì)于一些第三方crash信息搜集工具寺酪,比如Bugly或者友盟,它們只有當(dāng)程序出現(xiàn)異常(崩潰)的時(shí)候才會(huì)搜集異常信息替劈。而AvoidCrash的作用是寄雀,防止部分常見異常的發(fā)生,異常被AvoidCrash捕獲了陨献,程序就不會(huì)崩潰盒犹,第三方crash信息搜集工具就不會(huì)搜集到崩潰信息咯。

如何處理才能既防止崩潰眨业,又搜集到崩潰信息

AvoidCrash若捕獲到異常急膀,將會(huì)發(fā)出一個(gè)通知:AvoidCrashNotification,監(jiān)聽該通知即可獲取到原本將導(dǎo)致崩潰的具體信息。此時(shí)你可以利用Bugly的自定義異常接口將這些異常信息上傳到Bugly坛猪。下面上代碼脖阵,上圖說明。

1墅茉、首先先來查看下Bugly提供的上報(bào)異常的接口

Bugly上報(bào)自定義異常接口

2命黔、創(chuàng)建一個(gè)上報(bào)異常的工具類 BuglyManager(可以充分利用Bugly上報(bào)自定義異常功能,方便我們快速定位app出現(xiàn)的異常,下圖展示了我所開發(fā)的項(xiàng)目中使用Bugly上報(bào)了哪些錯(cuò)誤類型)


/** 上報(bào)錯(cuò)誤信息 */
+ (void)reportErrorName:(NSString *)errorName errorReason:(NSString *)errorReason callStack:(NSArray *)aStackArray extraInfo:(NSDictionary *)info{
    
    [Bugly reportExceptionWithCategory:3 errorName reason:errorReason callStack:aStackArray extraInfo:info terminateApp:NO];
}

3就斤、在AppDelegate中初始化AvoidCrash并且監(jiān)聽通知:AvoidCrashNotification

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    [AvoidCrash makeAllEffective];

    //監(jiān)聽通知:AvoidCrashNotification, 獲取AvoidCrash捕獲的崩潰日志的詳細(xì)信息
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealwithCrashMessage:) name:AvoidCrashNotification object:nil];
    return YES;
}

- (void)dealwithCrashMessage:(NSNotification *)note {
    //異常攔截并且通過bugly上報(bào)
    
    NSDictionary *info = note.userInfo;
    NSString *errorReason = [NSString stringWithFormat:@"【ErrorReason】%@========【ErrorPlace】%@========【DefaultToDo】%@========【ErrorName】%@", info[@"errorReason"], info[@"errorPlace"], info[@"defaultToDo"], info[@"errorName"]];
    NSArray *callStack = info[@"callStackSymbols"];
    
    [BuglyManager reportErrorName:Bugly_ErrorName_AvoidCrash errorReason:errorReason callStack:callStack extraInfo:nil];

4悍募、寫一個(gè)AvoidCrash可以攔截的異常

    NSArray *array = @[@"iOS"];
    NSString *string = array[100];
    

5、在Xcode控制臺(tái)可以看到下圖的輸出

Xcode控制臺(tái)輸出

6洋机、去Bugly錯(cuò)誤分析中查看

Bugly錯(cuò)誤分析
Bugly錯(cuò)誤分析詳情

疑惑2

2坠宴、為什么集成了AvoidCrash還是會(huì)報(bào)unrecognized selector sent to instance的異常?

很多小伙伴并沒有下載過Demo查看AppDelegate中的代碼和注釋绷旗,其實(shí)在里面都寫得比較詳細(xì)了喜鼓,并且在AvoidCrash.h文件中的部分方法也寫了一些注意事項(xiàng)。

若要捕獲 unrecognized selector sent to instance 類型的異常

1衔肢、首先查看下AvoidCrash中初始化AvoidCrash的兩個(gè)方法

/**
 *  
 *  開始生效.你可以在AppDelegate的didFinishLaunchingWithOptions方法中調(diào)用becomeEffective方法
 *  【默認(rèn)不開啟  對(duì)”unrecognized selector sent to instance”防止崩潰的處理】
 *
 */
+ (void)becomeEffective;


/** 
 *  相比于becomeEffective庄岖,增加
 *  對(duì)”unrecognized selector sent to instance”防止崩潰的處理
 *
 *  但是必須配合setupClassStringsArr:使用
 */
+ (void)makeAllEffective;

2、若要捕獲 unrecognized selector sent to instance 類型的異常角骤,請(qǐng)使用[AvoidCrash makeAllEffective] 并且配合下面的兩個(gè)方法使用隅忿。(這兩個(gè)方法可以配合使用,可以同時(shí)使用)

/** 
 *  初始化一個(gè)需要防止”unrecognized selector sent to instance”的崩潰的類名數(shù)組
 *  ??不可將@"NSObject"加入classStrings數(shù)組中
 *  ??不可將UI前綴的字符串加入classStrings數(shù)組中
 */
+ (void)setupNoneSelClassStringsArr:(NSArray<NSString *> *)classStrings;


/**
 *  初始化一個(gè)需要防止”unrecognized selector sent to instance”的崩潰的類名前綴的數(shù)組
 *  ??不可將UI前綴的字符串(包括@"UI")加入classStringPrefixs數(shù)組中
 *  ??不可將NS前綴的字符串(包括@"NS")加入classStringPrefixs數(shù)組中
 */
+ (void)setupNoneSelClassStringPrefixsArr:(NSArray<NSString *> *)classStringPrefixs;

3邦尊、具體的使用方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    [AvoidCrash makeAllEffective];
    
    
    //================================================
    //   1背桐、unrecognized selector sent to instance(方式1)
    //================================================
    
    //若出現(xiàn)unrecognized selector sent to instance并且控制臺(tái)輸出:
    //-[__NSCFConstantString initWithName:age:height:weight:]: unrecognized selector sent to instance
    //你可以將@"__NSCFConstantString"添加到如下數(shù)組中,當(dāng)然蝉揍,你也可以將它的父類添加到下面數(shù)組中
    //比如链峭,對(duì)于部分字符串,繼承關(guān)系如下
    //__NSCFConstantString --> __NSCFString --> NSMutableString --> NSString
    //你可以將上面四個(gè)類隨意一個(gè)添加到下面的數(shù)組中疑苫,建議直接填入 NSString
    

    //我所開發(fā)的項(xiàng)目中所防止unrecognized selector sent to instance的類有下面幾個(gè)熏版,主要是防止后臺(tái)數(shù)據(jù)格式錯(cuò)亂導(dǎo)致的崩潰纷责。個(gè)人覺得若要防止后臺(tái)接口數(shù)據(jù)錯(cuò)亂,用下面的幾個(gè)類即可撼短。

    NSArray *noneSelClassStrings = @[
                          @"NSNull",
                          @"NSNumber",
                          @"NSString",
                          @"NSDictionary",
                          @"NSArray"
                          ];
    [AvoidCrash setupNoneSelClassStringsArr:noneSelClassStrings];
    
    
    //================================================
    //   2再膳、unrecognized selector sent to instance(方式2)
    //================================================
    
    //若需要防止某個(gè)前綴的類的unrecognized selector sent to instance
    //比如你所開發(fā)項(xiàng)目中使用的類的前綴:CC、DD
    //你可以調(diào)用如下方法
    NSArray *noneSelClassPrefix = @[
                                    @"CC",
                                    @"DD"
                                    ];
    [AvoidCrash setupNoneSelClassStringPrefixsArr:noneSelClassPrefix];
    
    
    
    //監(jiān)聽通知:AvoidCrashNotification, 獲取AvoidCrash捕獲的崩潰日志的詳細(xì)信息
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealwithCrashMessage:) name:AvoidCrashNotification object:nil];
    return YES;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末曲横,一起剝皮案震驚了整個(gè)濱河市喂柒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禾嫉,老刑警劉巖灾杰,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異熙参,居然都是意外死亡艳吠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門孽椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昭娩,“玉大人,你說我怎么就攤上這事黍匾±该欤” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵锐涯,是天一觀的道長磕诊。 經(jīng)常有香客問我,道長纹腌,這世上最難降的妖魔是什么霎终? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮升薯,結(jié)果婚禮上神僵,老公的妹妹穿的比我還像新娘。我一直安慰自己覆劈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布沛励。 她就那樣靜靜地躺著责语,像睡著了一般。 火紅的嫁衣襯著肌膚如雪目派。 梳的紋絲不亂的頭發(fā)上坤候,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音企蹭,去河邊找鬼白筹。 笑死智末,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徒河。 我是一名探鬼主播系馆,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼顽照!你這毒婦竟也來了由蘑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤代兵,失蹤者是張志新(化名)和其女友劉穎尼酿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體植影,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裳擎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了思币。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹿响。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖支救,靈堂內(nèi)的尸體忽然破棺而出抢野,到底是詐尸還是另有隱情,我是刑警寧澤各墨,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布指孤,位于F島的核電站,受9級(jí)特大地震影響贬堵,放射性物質(zhì)發(fā)生泄漏恃轩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一黎做、第九天 我趴在偏房一處隱蔽的房頂上張望叉跛。 院中可真熱鬧,春花似錦蒸殿、人聲如沸筷厘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酥艳。三九已至,卻和暖如春爬骤,著一層夾襖步出監(jiān)牢的瞬間充石,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工霞玄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骤铃,地道東北人拉岁。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像惰爬,于是被迫代替她去往敵國和親喊暖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 我之前總結(jié)了一下自己在做咨詢時(shí)輔導(dǎo)團(tuán)隊(duì)時(shí)遇到的問題补鼻,并且給出了相應(yīng)解答哄啄。 Q1:什么是持續(xù)集成? 集成风范,就是一些孤...
    ThoughtWorks閱讀 2,271評(píng)論 0 11
  • 閑話十咨跌,面子和里子 假期到了,親戚朋友們團(tuán)聚硼婿,這飯桌上少不了念叨的就是孩子锌半,熱門話題不外乎這三件:大兒子的緣(結(jié)婚...
    dbmyh閱讀 276評(píng)論 0 2
  • [TOC] 簡介 caffe是一個(gè)清晰,可讀性高寇漫,快速的深度學(xué)習(xí)框架刊殉。作者是賈揚(yáng)清,加州大學(xué)伯克利的ph.D州胳,現(xiàn)就...
    charming閱讀 960評(píng)論 0 0
  • 我突然感覺自己好像有點(diǎn)抑郁记焊,會(huì)突然想到父母,腦子里會(huì)突然浮現(xiàn)出父母離開栓撞,自己哭的一臉的場(chǎng)景遍膜,然后莫名的鼻尖一酸...
    暮離月閱讀 216評(píng)論 0 0
  • 剛巧昨天看到一篇文章,說未來遇見什么樣的自己取決于現(xiàn)在的你瓤湘,深深的認(rèn)同瓢颅,就好比作為獨(dú)立的人,從出生開始可能你的人生...
    姜梔子閱讀 643評(píng)論 0 1