Write In Frist:今天檢測(cè)內(nèi)存泄漏的時(shí)候,打算在我們的項(xiàng)目中集成下MLeaksFinder傳送門使用。
先天條件:我們的App今年第五年了,從來(lái)沒(méi)有使用Pod。一些第三方SDK都是單獨(dú)集成的。
關(guān)于CocoaPods的使用。送上官網(wǎng)傳送門和一個(gè)寫的比較簡(jiǎn)練的簡(jiǎn)書@白開水ln
集成遇到的問(wèn)題:
一、Target中的一些設(shè)置,CocoaPods 也做了默認(rèn)的設(shè)置,如果兩個(gè)設(shè)置結(jié)果不一致,就會(huì)造成如下警告。示例如下:
修改方法:最直接的就是在對(duì)應(yīng)項(xiàng)中添加一個(gè)字段 $(inherited)
$(inherited) 百度了下字面意思是:繼承的。實(shí)際上的含義,目前的理解是:繼承自更高一級(jí)的配置。SO傳送門
看到網(wǎng)上有提及說(shuō)直接清空整個(gè)對(duì)應(yīng)項(xiàng)的配置字段。因?yàn)槲覀兊捻?xiàng)目有一些其他SDK配置,這種方法明顯不可取。經(jīng)過(guò)驗(yàn)證,添加$(inherited)可以在不改動(dòng)原有配置的情況下,修復(fù)這個(gè)警告。
1.1紅色下劃線標(biāo)記了Debug 和 Release版本。說(shuō)明兩個(gè)配置項(xiàng)都需要修改。
1.2、碰到的幾種對(duì)應(yīng)項(xiàng)
-
HEADER_SEARCH_PATHS
對(duì)應(yīng)需要修改:Target -> Build setting -> Header Search Paths項(xiàng)目。
-
GCC_PREPROCESSOR_DEFINITIONS
對(duì)應(yīng)需要修改:Target -> Build setting ->Preprocessor Macros
-
OTHER_LDFLAGS
對(duì)應(yīng)需要修改:Target -> Build setting ->Other linker flags
-
OTHER_CFLAGS
對(duì)應(yīng)需要修改:Target -> Build setting ->Other c flags
-
OTHER_CPLUSPLUSFLAGS
對(duì)應(yīng)需要修改:Target -> Build setting ->Other c++ flags
最后一項(xiàng)我沒(méi)有碰到,但是我為了以防萬(wàn)一,直接添加了。
二、編譯報(bào)錯(cuò)文件丟失
自己?jiǎn)为?dú)寫一個(gè)小demo編譯沒(méi)有問(wèn)題。而我的項(xiàng)目卻編譯失敗。針對(duì)性的去搜索了也沒(méi)有解決。最后對(duì)比demo。發(fā)現(xiàn)pod下的.a文件都爆紅,未進(jìn)行編譯。拿demo的針對(duì)性替換也不行。畢竟libPods.a無(wú)法替換。好在發(fā)現(xiàn)了問(wèn)題根源。
解決辦法:Target -> Build setting ->Build Active Architecture Only 屬性。設(shè)置debug項(xiàng)為YES。<如果你的是no,替換為YES進(jìn)行嘗試>。
Build Active Architecture Only含義:
這個(gè)屬性設(shè)置為yes,是為了debug的時(shí)候編譯速度更快,它只編譯當(dāng)前的architecture版本。
而設(shè)置為no時(shí),會(huì)編譯所有的版本。
這個(gè)是設(shè)備對(duì)應(yīng)的architecture:
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c (靜態(tài)庫(kù)只要支持了armv7,就可以在armv7s的架構(gòu)上運(yùn)行)
arm64(注:無(wú)armv64): iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、
iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3
編譯出的版本在cpu內(nèi)核結(jié)構(gòu)向下兼容的,比如你設(shè)置此值為yes,用iphone4編譯出來(lái)的是armv7版本的,iphone5也可以運(yùn)行,因?yàn)閍rmv7s兼容armv7。但是armv6的設(shè)備就不能運(yùn)行。
所以,一般debug的時(shí)候可以選擇設(shè)置為yes,release的時(shí)候要改為no,以適應(yīng)不同設(shè)備。