前言
先說下友盟的SDK残拐,現(xiàn)在真是對友盟沒脾氣了,分享不正常碟嘴!三方登錄不正常溪食!崩潰分析也不好用!最近所在項目的App娜扇,加了直播功能错沃,總是會出現(xiàn)些不可預(yù)見的閃退出現(xiàn),但通過友盟的崩潰統(tǒng)計分析雀瓢,真心看的云里霧里的枢析,很不方便,分析工具也不夠友好刃麸,用起來很麻煩醒叁。一些朋友、同行都在用Bugly嫌蚤,鑒于Bugly是騰訊旗下的產(chǎn)品辐益,在用過他們的JSPatch后断傲,對騰訊的產(chǎn)品也是好感滿滿脱吱,這里就總結(jié)下Bugly的簡單使用。
然后說下符號表對于崩潰分析的重要性认罩,因為雖然很多人在用Bugly箱蝠,但可能沒有用到符號表,導(dǎo)致很多問題沒法定位到具體代碼。所以宦搬,寫這篇文章牙瓢,一是幫自己記錄下使用流程及終端命令;二是如果你沒用過Bugly间校,可以幫助你快速上手矾克;三是如果你在用Bugly,但沒有使用符號表憔足,可以讓你把符號表用起來胁附。但如果這些你都用過,這篇入門文章滓彰,就可以不用看了??控妻。
集成
集成很簡單,按照官方文檔來就好揭绑,我們這里建個簡單的小項目弓候,模擬一些崩潰,測試下Bugly的bug上報及時性他匪。
項目就取名叫BuglyDemo了菇存,創(chuàng)建好項目后,去Bugly的控制臺邦蜜,添加我們的應(yīng)用撰筷。
隨便填一填就好了。然后我們點擊異常上報畦徘,查看他的SDK集成方法毕籽,這里就不細說了。
然后在AppDelegate中初始化井辆,OK关筒。
// 頭文件
#import <Bugly/Bugly.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[Bugly startWithAppId:@"此處替換為你的AppId"];
return YES;
}
AppID可以點擊你在控制臺創(chuàng)建的App,然后點產(chǎn)品設(shè)置就能看到了杯缺。
Bug上傳測試
通過以上的集成及初始化蒸播,我們就可以使用了。現(xiàn)在我們創(chuàng)造一個閃退bug萍肆,測試下Bugly的bug上傳及時性袍榆。
來到ViewController中,在touchBegin中制造一個閃退塘揣。以數(shù)組越界為例:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSArray *arr = @[@"", @""];
arr[5];
}
運行項目(iOS10需要允許App進行數(shù)據(jù)訪問)包雀,點擊屏幕,這時就崩潰了亲铡,然后刷新Bugly的控制臺才写,你會發(fā)現(xiàn)葡兑,bug已經(jīng)統(tǒng)計到了。所以赞草,Bugly的崩潰上傳是在崩潰后立刻上傳的讹堤,而友盟的bug上傳,你需要反復(fù)啟動幾次應(yīng)用厨疙,然后過幾分鐘才會在控制臺看到洲守。
我們點進異常問題中去看一下,崩潰信息大致是這樣的沾凄,相較于友盟的分析岖沛,我們可以很直觀的看到崩在哪個方法里了,但想更具體的分析代碼位置搭独,就要用到符號表了婴削。
符號表分析
沒有符號表,我們就無法定位崩潰中的符號對應(yīng)的代碼所在的類以及類中的行數(shù)位置牙肝。我們在每次構(gòu)建版本唉俗、debug的時候,都會生成dSYM后綴名的符號表文件配椭,而我們App在手機上運行的時候虫溜,崩潰后產(chǎn)生的崩潰信息,不可能定位到代碼的多少多少行股缸,因為這些信息對于App運行是沒有意義的衡楞,存儲在App中勢必會增大安裝包的體積,所以App的崩潰信息都是存儲為各種符號敦姻,具體符號代表什么瘾境,需要去符號表中查找對應(yīng)的含義。
我們每次debug镰惦、構(gòu)建版本迷守,都會生成dSYM文件,都對應(yīng)了一個UUID(像我們的手機一樣旺入,都有一個唯一標志),按下圖指示茵瘾,我們就能找到我們所使用的App版本對應(yīng)的dSYM文件的UUID礼华,通過這個UUID,我們就能找到存儲在我們電腦中的dSYM文件餐禁,將這個文件上傳到bugly末盔,bugly會自動幫我們找到崩潰符號的含義陨舱。
需要注意的是莺奔,構(gòu)建版本會自動生成dSYM文件役听,但debug的時候瘤袖,是沒有的泡嘴,需要我們手動開啟建椰。在build setting中搜索debug,將下面兩項內(nèi)容修改為正確的設(shè)置:
有了符號表的UUID蹦浦,我們打開終端扭吁,按UUID找到符號表的路徑。
mdfind "com_apple_xcode_dsym_uuids == A8E87810-70A7-3335-B638-C8B01BE15D79"
后面的一串字母數(shù)字組合盲镶,就是我們的UUID侥袜,這里需要將UUID按一定格式處理下,也就是在特定位置插入“-”溉贿,具體格式如下:
來到終端枫吧,運行上面的命令,就定位到了dSYM文件的位置:
打開文件路徑宇色,就找到了dSYM文件:
拷貝出來九杂,壓縮為zip文件,上傳到bugly上宣蠕。
刷新頁面例隆,再回去看剛才的問題,定位到了為ViewController.m的第24行:
SO抢蚀,我們的24行做了越界的處理:
其他體驗
與友盟比較镀层,Bugly更人性化一些,而且頁面更好看寫皿曲。對于閃退的出現(xiàn)唱逢,還提供了如何避免和修復(fù)該Bug的一些幫助:
Bugly也提供熱修復(fù)功能吴侦,當(dāng)然官方說自己的SDK也是基于JSPatch的,想了解熱修復(fù)的坞古,可以參考我的這篇文章:JSPatch熱修復(fù)簡單使用
官網(wǎng)文檔也提供了自動上傳dSYM文件的操作流程备韧,有興趣的可以試試,避免以后每次新版本都要手動上傳dSYM文件绸贡。dSYM文件也可以手動查找:
找到你構(gòu)建的版本盯蝴,右鍵show in finder:
然后在定位到的文件上右鍵顯示包內(nèi)容就OK了:
總結(jié)
與友盟相比毅哗,Bugly在崩潰信息統(tǒng)計方面听怕,優(yōu)勢很明顯,除了上面的功能虑绵、細節(jié)強大尿瞭,郵件提示、公眾號提示翅睛,都體現(xiàn)了Bugly的用心声搁。不說別的,就友盟那沒事就抽風(fēng)的服務(wù)器捕发,我還是建議廣大開發(fā)者快來擁抱鵝廠吧疏旨。