1.一般項(xiàng)目的scheme是
Debug
,Release
分別對(duì)應(yīng)debug模式、release模式
2.由于項(xiàng)目接口環(huán)境是區(qū)分環(huán)境的算利,所以在項(xiàng)目中設(shè)置了Debug_dev, Debug_uat, Debug_pro藕漱,刪掉了默認(rèn)的Debug模式
問(wèn)題產(chǎn)生的背景
在Debug_dev
時(shí)畏吓, 通過(guò)cocoapods方式引入的MLeaksFinder
并不生效,排查原因發(fā)現(xiàn)MLeaksFinder
有如下代碼定義迅脐。MLeaksFinder
是根據(jù)DEBUG
宏判斷是否需要加載,但是在項(xiàng)目?jī)?nèi)部打印,Debug
為1
//#define MEMORY_LEAKS_FINDER_ENABLED 0
#ifdef MEMORY_LEAKS_FINDER_ENABLED
#define _INTERNAL_MLF_ENABLED MEMORY_LEAKS_FINDER_ENABLED
#else
#define _INTERNAL_MLF_ENABLED DEBUG
#endif
分析原因
分析原因:pod模塊代碼編譯鏈接的時(shí)間要先于工程內(nèi)代碼搓蚪,此時(shí)要么是獲取不到
DEBUG
的值,要么是此時(shí)沒(méi)有DEBUG
-
排查Project的Build Settings和Pods的Build Settings丁鹉,發(fā)現(xiàn)有個(gè)
Preprocessor Macros
的宏妒潭,定義了DEBUG=1
,看名字猜測(cè)這是一個(gè)預(yù)定義的宏揣钦,用來(lái)設(shè)置項(xiàng)目中編譯前的一些值雳灾,這里也就是Debug值的由來(lái)之一
如圖,找到問(wèn)題所在冯凹,在Debug_dev模式下并沒(méi)有所需要的DEBUG=1
谎亩,那么我們就需要在這里加上去 在
Proprocessor Macros
的Debug_dev
這里手動(dòng)加上DEBUG=1
是生效了,但是每次pod install之后又被重新覆蓋沒(méi)了宇姚。所以這個(gè)方法不是可靠的匈庭,我們需要在每次pod install觸發(fā)之后寫(xiě)上DEBUG=1
這個(gè)值
解決
- 搜索資料發(fā)現(xiàn)Podfile里面可以做自定義配置,如下:
pod 'MLeaksFinder'
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
puts "===================>target name #{target.name}"
if target.name == 'MLeaksFinder'
target.build_configurations.each do |config|
puts "===================>wxq #{config}"
if config.name == 'Debug_dev'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','DEBUG=1']
end
end
end
end
end
-
然后執(zhí)行pod install命令浑劳,更新配置阱持,效果如下,然后運(yùn)行項(xiàng)目魔熏,OK