Xcode默認的編譯的時候,會生成Debug Symbols信息,這些信息可以使得我們在調(diào)試的時候能夠看到代碼執(zhí)行的類、方法以及變量的信息;對于線上crash,可以通過這些信息定位crash代碼的位置。但是,對于一些需要打包給別人使用的類庫,如果帶有Debug Symbols信息那使用者就可以跟蹤到類庫的源代碼。為了保護代碼,在提供包的時候,我們想要去掉這些信息。
編譯時,蘋果允許我們選擇是否攜帶Debug Symbols信息,可以在工程的Build Settings中進行設(shè)置
一、控制Symbols生成
Code Generation
1、Generate Debug Symbols
控制是否生成調(diào)試符號化信息
對于我們看到的現(xiàn)象是:崩潰時,是否能看到靜態(tài)庫的源碼
2、Debug Information Level
當Generate Debug Symbols為YES時,控制生成的調(diào)試符號化信息的詳細程度
默認值 Compiler default,還有一個選項是 Line tables only,設(shè)置為Line tables only則只生成包含 函數(shù)名、文件名和行號 的信息,不包含變量信息,在崩潰時進入源碼后,調(diào)試器中不顯示變量的信息
二、控制Symbols剝離
Deployment
1、Deployment Postprocessing
- 控制是否處理剝離邏輯的總開關(guān),這個如果是NO的話,后面的都不起作用
2、Strip Debug Symbols During Copy
控制copy時是否剝離
這里的copy是指,一些資源文件和類庫的copy,如下設(shè)置的類庫會編譯的時候會執(zhí)行copy操作
Copy File
Embedded Binaries
由于copy的時候會,類庫已經(jīng)完成了code sign,此時如果做剝離就會導致簽名失效,所以這項要設(shè)置為NO。參考鏈接:Skipping Copy Phase Strip
3、Strip Linked Product
控制是否剝離
-
下面是別人總結(jié)的,很好,截屏保存下來了
a5.png
4、Strip Style
- 控制剝離哪些信息,有三個可選項:All Symbols(剝離所有)、Non-Global Symbols(保留全局符號)、Debugging Symbols
靜態(tài)庫不能設(shè)置為All Symbols,最多設(shè)置為 Non-Global Symbols
三、控制dSYM文件生成
Build Options
1、Debug Information Format
控制是否生成dSYM文件
選項有 DWARF 和 DWARF with dSYM File,設(shè)置為DWARF with dSYM File則會生成一個dSYM文件
這個設(shè)置項,依賴于Generate Debug Symbols設(shè)置為YES的前提
對于靜態(tài)庫,即使設(shè)為DWARF with dSYM File,也不會生成dSYM文件
四、涉及到的命令行相關(guān)命令
nm:查看可執(zhí)行文件或者二進制庫的符號表信息
strip:剝離符號表





