動(dòng)態(tài)修改iOS app的環(huán)境變量(Jenkins+Cocoapods)

簡而言之,這一次是通過修改 Podfile 文件內(nèi)容來實(shí)現(xiàn)動(dòng)態(tài)修改 pod 模塊的全局宏定義(Preprocessor Macros)。

Cocoapods 模塊化架構(gòu)中,子模塊使用到一個(gè)全局宏定義,但是這個(gè)全局宏定義是動(dòng)態(tài)的,還不能在 podspec 文件中這樣子固定下來:

s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => '$(inherited) UAT_Release=1' }

因?yàn)?UAT_Release 這個(gè)定義取決于 Jenkins 參數(shù)化構(gòu)建時(shí)選擇的環(huán)境。
那么就需要?jiǎng)討B(tài)去修改 Xcconfig 配置文件,加入全局宏定義的 Build setting,這里是配合 Jenkins 進(jìn)行自動(dòng)化部署,使用 shell 腳本來達(dá)到動(dòng)態(tài)修改的目的,在構(gòu)建(Build)步驟中的Execute shell中加入如下腳本:

Command.png

說明:
1、${Configuration}是Jenkins中的參數(shù)(This project is parameterized),例如:UAT_Debug、UAT_Release、AppStore_Debug、AppStore_Release 等不同的環(huán)境,第一行只是打印出了當(dāng)前的參數(shù)值;

2、sed 命令往 Podfile 文件中追加內(nèi)容,這里需要注意的是,與Linux不同,sed -i 后面需要加入 "" 用以備份原文件,不然執(zhí)行會(huì)出錯(cuò);

3、/pod 'JJSEventAspect'/ 這一句則是匹配 pod 'JJSEventAspect' 所在的行;

4、a 表示新增內(nèi)容,\ 則是換行;

5、最后的 Podfile 指文件名;

6、追加完成 hook 的代碼之后執(zhí)行 pod install 就很好理解了;

7、要追加進(jìn)去的 hook 代碼:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited) UAT_Release=1 COCOAPODS=1'
end
end
end
其中 UAT_Release 是參數(shù)化的結(jié)果,這個(gè)值是動(dòng)態(tài)的。這一段 hook 執(zhí)行后,子模塊(pod)的build setting的全局宏定義(Preprocessor Macros)也都全部修改完成,如果是需要有選擇性的修改,可以在 hook 中加入判斷邏輯即可。

修改完成的 Podfile 文件是這樣的:

Podfile screen.png

最后,測試人員只需要選擇需要的打包環(huán)境,輕松的點(diǎn)一下 Build 按鈕就可以拿到想要的包了。

Build.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容