[APP] Fabrio Crashlytics導入簡介-iOS
主題: |
[APP] Fabrio Crashlytics導入簡介-iOS |
文章簡介: |
簡介免費的APP crash report工具—Crashlytics(以iOS為例) |
作者: |
劉勇麟(Peter) |
版本/產出日期: |
V1.0/2016.12.29 |
1. 前言
一個APP的誕生,從初步的發想,UX規劃,到開工動土的實作,最終上線發佈,整個過程無一不令人絞盡腦汁,嘔心瀝血。然而,事情永遠不會永遠一帆風順,俗諺有云:「程式不會照你想的方式去跑,只會照你寫的方式去跑」,清楚明白地點出:只要是人工寫出來的程式,幾乎是一定會有bug,因此「debug」自然是如影隨形地常伴開發者左右。
Debug的起手式,十之八九會透過追本溯源,再對症下藥;bug界裡,對APP殺傷力最大的究極魔王,非「crash」莫屬!一旦讓用戶遭遇到crash,若能再次完成原定作業,還可以勉強繼續使用下去;若然會造成主要功能無法使用,那麼APP肯定會被用戶直接移除,不再使用。
除了技術,大部份debug過程會很需要仰賴過往所累積的經驗,也常會需要「重現bug的方法或流程」,來找出「事故現場」(code出問題的點),包含crash debug也是一樣;雖然Android/iOS都具有crash report的機制,但大部分的情況下,開發者並無法與用戶有直接的交流或討論,也就無法透過釐清bug發生時的狀況,或是接上device取得log。
本文介紹免費的線上crash log收集套件—Crashlytics,(原為一獨立套件,後來被Fabric整併成為其產品之一。https://fabric.io/ ),整合後可透過網頁取得crash log,藉以提高debug的效率。
2. 目的
本篇將以「Apple macbook 搭配iOS app 開發」為例,一步步說明Crashlytics的使用流程。
3. 將Crashlytics導入專案中
3.1、申請Crashlytics帳戶
要使用Crashlytics,首先需要以e-mail註冊成為其會員;步驟非常簡單,進入官網(https://fabric.io)點擊右上角的「GET FABRIC」按鈕,出現以下畫面,填寫帳號資訊,按下「Send Confirmation」;最後到所設定的信箱,點擊確認信中的連結,即完成整個註冊流程。

3.2、下載與安裝應用程式
a.第一次登入fabric,會出現以下畫面,供選擇所要開發的平台,目前支援Android/iOS/Unity,本文以Apple iOS搭配 macbook為例,接下來會要求下載應用程式:

b.下載過程中,會出現步驟提示說明:

c.依照OSX/Windows的方式,安裝應用程式後並執行

3.3、導入專案中
第一次登入,清單會是空白一片,點擊「Browse」選擇要導入的專案.xcodeproj檔案

選好導入之後,畫面如下,選擇Crashlytics的「install」,並同意其條款

接下來要在專案的「Build phase」加入一段script;並在完成後進行app build



build完工後,應用程式會自動偵測,並進入下一步:要求匯入SDK


將其拖曳進Xcode專案中適當的位置


完成後,應用程式同樣會自動進入下一步教學,要求在專案的AppDelegate.m中加入對應的code;完成後,需進行app clean & Run


成功執行app後,應用程式會自動進入主畫面

若已在debug視窗可看見Crashlytics版本資訊(下方黑底視窗),但應用程式一直停留在「Verifying Installation」沒有反應,

請嘗試以下動作:
從Xcode停止app,並再次Clean & Build

從Xcode停止app,直接在device(或模擬器)再次執行app

將應用程式完全關閉(從fabric選單選擇「結束」),並再次執行應用程式

一般在開發過程中,會是以debug模式在進行,因此在「project」→「Build Setting」→「Debug Information Format」中,要將Debug的選項更改為「DWARF with dSYM File」,才能讓Crashlytics正常收集crash report

3.4、實測
既然是「Crash log收集工具」,要發揮功效的第一個動作,就是要讓app crash;雖說crash是每個人都不樂見,真的要刻意弄一個來測,一時半刻間好像也沒這麼簡單; 所幸在應用程式裡就有提供sample來讓app crash:
開啟應用程式主畫面,選擇Crashlytics,就可以看到「Force a Crash」選項

依據指示依樣畫葫蘆,可以在畫面上產一個名為「Crash」的按鈕;點擊該鈕,就可以讓app 發生crash。
要特別注意的是,crash發生的當下,仍只是iOS本身所留存的crash log,必須再次開啟app,讓Crashlytics SDK能收集並上傳log。


再次開啟app後,稍等數分鐘再進入網頁,便可看到剛才所發生的crash log;此外,作為帳號的e-mail信箱,也會收到一份crash issue通知信。
至此,Crashlytics的導入便已大功告成。


4. Crash report網頁簡介

進入網站的主頁如上圖,最上方一排依序有app版號、事件篩選器、日期篩選器;中間為crash統計資訊,以下最下方的issue log項目清單;本節介紹幾個常用的功能:
4.1、同帳號有多個app
若帳號內有多個app,點擊左側的app icon,可拉出選單做選擇;以iOS為例,不同的bundle identifier就會視為不同app:

4.2、app已有多個版本
若app已有多個版本,可從「Top Builds」展開下拉選單,選擇特定版本;清單的數字是來自app 「TARGETS」-「General」中所設定的「Version(Build)」

4.3、查看細節資料
點擊下方的issue log項目,可查看更詳細的資訊,包含本次crash的細節(本例為UploadFile.m 第65行),以及裝置資訊(儲存媒體剩餘空間、記憶體剩餘空間、iPhone/iPad型號、iOS版本)


5. 其他眉眉角角
雖然Crashlytics 簡單易用,但在實務上若非僅是自用,又沒有教育好對口單位(不論是客戶或是自家長官),反而是兩面刃。
• 遭質疑「都已經知道crash在哪一行,為什麼要解這麼久?」
a. 若crash要有特定步驟,再加上前因後果才會發生,crash所在的行數並不一定就是root cause;
b. crash所記錄到的點,已是OS層級,並非app PG所能處理,例如下圖的「libc++abi.dylib」

• report中的「USERS」是指device數量,而非「app用戶帳號數」,若有需要做統計報表時,建議要特別註記此點,以免數據失真造成誤會。
• report是透過internet上傳,若app是「免網路」或「僅限內部網路」運作,一旦「app運行過程中,device完全沒有機會接觸到internet」,將會永遠無法上傳report。
6. 參考來源
• Fabric官方網頁
https://fabric.io
