Photo by Arnold Francisca on Unsplash
追蹤App Crash 常用方式之一就是在 App 裡放入 Firebase Crashlytics,只要App 有 Crash 就可以從 Firebase 後台看到,不過 Crashlytics 會要求上傳一個叫 dSYM 的東西,若沒有上傳 Firebase 會告知無法解析Crash 的資訊。
那到底dSYM 是什麼? 又應該要如何產生呢?
dSYM
dSYM 是 debug symbols 顧名思義就是Debug 專用的,運用的地方就是在解析 Crash Report 用的,從手機端所收到的Crash Report 使用 dSYM 分析之後,可以得知是 App 裡的那一行程式發生 Crash ,當然這並不表示就是那一行程式出了錯誤,一般都還是要看上下文才有可能找出真正的原因,但是知道是那一行程式發生Crash 在找尋bug 的路上會快很多。
dSYM 如何產生?
其實在 Xcode 中預設 Release 版本都會產生 dSYM 檔案,若並不想要Debug 版產生 dSYM 的話,並不需要特別調整,但是一般公司除了 Release 與 Debug 外,還會有其他的環境,像是 Pre-release 之類或是想要在 Debug 的時候就能產生dSYM 並丟到 Crashlytics 上分析,這時候就需要調整設定了
Generate Debug Symbol
第一個要檢查的就是 Generate debug symbol 參數,從Project -> Build setting 底下搜尋 Generate debug symbol 就會出現了,要確認的事,這個參數需要設定為 Yes ,記得如果沒有特別改動的話預設值就是 Yes 了

Debug Information Format
再來一樣是在 Build setting 底下搜尋 Debug information format,展開可以看到 DWARF / DWARF with dSYM file,DWARF 全名是 Debugging With Arbitrary Record Formats,簡單來說就是一般的Debug file ,DWARF with dSYM 就是一般的Debug file 再加上 debug symbol。

Xcode 的預設值是除了 Release 外都是 DWARF ,所以想要其他版本下也產生 dSYM 檔就是要改成 DWARF with dSYM,這樣就可以在debug 的檔案中看到 dSYM 檔了,若是使用 Firebase Crashlytics 就會配合它的自動上傳程式,讓它自行去特定的資料夾中上傳檔案。
若有需要在 Release 版以外產生 dSYM 檔,就是要設定 Generate debug symbol 與 Debug information format,就看專案的需求,並不是每種專案都需要上傳Release 版以外的 dSYM 檔,因為在開發的時候發生Crash 也算是很正常的事情,多數情況都不是需要特別被記錄的,QA 用的環境比較可能要求要記錄 Crash,就看需求~
最後,慣例祝大家寫Code 愉快!!
Reference
[Stack overflow]What’s the difference between DWARF and DWARF with dSYM file?