Xcode默認(rèn)的編譯的時(shí)候,會生成Debug Symbols信息,這些信息可以使得我們在調(diào)試的時(shí)候能夠看到代碼執(zhí)行的類者祖、方法以及變量的信息;對于線上crash绢彤,可以通過這些信息定位crash代碼的位置七问。但是,對于一些需要打包給別人使用的類庫茫舶,如果帶有Debug Symbols信息那使用者就可以跟蹤到類庫的源代碼械巡。為了保護(hù)代碼,在提供包的時(shí)候饶氏,我們想要去掉這些信息坟比。
編譯時(shí),蘋果允許我們選擇是否攜帶Debug Symbols信息嚷往,可以在工程的Build Settings中進(jìn)行設(shè)置
一葛账、控制Symbols生成
Code Generation
1、Generate Debug Symbols
控制是否生成調(diào)試符號化信息
對于我們看到的現(xiàn)象是:崩潰時(shí)皮仁,是否能看到靜態(tài)庫的源碼
2籍琳、Debug Information Level
當(dāng)Generate Debug Symbols為YES時(shí),控制生成的調(diào)試符號化信息的詳細(xì)程度
默認(rèn)值 Compiler default贷祈,還有一個(gè)選項(xiàng)是 Line tables only趋急,設(shè)置為Line tables only則只生成包含 函數(shù)名、文件名和行號 的信息势誊,不包含變量信息呜达,在崩潰時(shí)進(jìn)入源碼后,調(diào)試器中不顯示變量的信息
二粟耻、控制Symbols剝離
Deployment
1查近、Deployment Postprocessing
- 控制是否處理剝離邏輯的總開關(guān),這個(gè)如果是NO的話挤忙,后面的都不起作用
2霜威、Strip Debug Symbols During Copy
控制copy時(shí)是否剝離
這里的copy是指,一些資源文件和類庫的copy册烈,如下設(shè)置的類庫會編譯的時(shí)候會執(zhí)行copy操作
Copy File
Embedded Binaries
由于copy的時(shí)候會戈泼,類庫已經(jīng)完成了code sign,此時(shí)如果做剝離就會導(dǎo)致簽名失效,所以這項(xiàng)要設(shè)置為NO大猛。參考鏈接:Skipping Copy Phase Strip
3扭倾、Strip Linked Product
控制是否剝離
-
下面是別人總結(jié)的,很好挽绩,截屏保存下來了
a5.png
4吆录、Strip Style
- 控制剝離哪些信息,有三個(gè)可選項(xiàng):All Symbols(剝離所有)琼牧、Non-Global Symbols(保留全局符號)、Debugging Symbols
靜態(tài)庫不能設(shè)置為All Symbols哀卫,最多設(shè)置為 Non-Global Symbols
三巨坊、控制dSYM文件生成
Build Options
1、Debug Information Format
控制是否生成dSYM文件
選項(xiàng)有 DWARF 和 DWARF with dSYM File此改,設(shè)置為DWARF with dSYM File則會生成一個(gè)dSYM文件
這個(gè)設(shè)置項(xiàng)趾撵,依賴于Generate Debug Symbols設(shè)置為YES的前提
對于靜態(tài)庫,即使設(shè)為DWARF with dSYM File共啃,也不會生成dSYM文件
四占调、涉及到的命令行相關(guān)命令
nm:查看可執(zhí)行文件或者二進(jìn)制庫的符號表信息
strip:剝離符號表