本文主要講解在iOS的實(shí)際開(kāi)發(fā)中咱揍,如何配置工程节预,最后利用這些配置,讓Jenkins打包更容易钥星。
本文的主線是:宏定義控制代碼塊 -> Configuration中定義宏 -> Scheme中配置Configuration -> Jenkins打包沾瓦。
一、宏定義的簡(jiǎn)單使用
經(jīng)常我們會(huì)在工程里配置了很多宏定義:
#define SERVER_URL_PRO @"https://mapi.bestpay.cn/" //生產(chǎn)環(huán)境地址
#define SERVER_URL_TEST @"https://test.bestpay.cn/" //測(cè)試環(huán)境地址
NSURL* url = [NSURL URLWithString: SERVER_URL_PRO] ;
有時(shí)候谦炒,你會(huì)用一個(gè)宏來(lái)控制代碼塊:
#define ENV_PRODUCTION 1 //生產(chǎn)環(huán)境
- (NSURL *)serverURL {
#if ENV_PRODUCTION
NSURL* url = [NSURL URLWithString:SERVER_URL_PRO] ;
#else
NSURL* url = [NSURL URLWithString:SERVER_URL_TEST] ;
#endif
return url ;
}
或者你還可以用一個(gè)宏來(lái)控制另外一個(gè)宏的值:
#define ENV_PRODUCTION 1 //生產(chǎn)環(huán)境
#if ENV_PRODUCTION
#define SERVER_URL @"https://mapi.bestpay.cn/" //生產(chǎn)環(huán)境地址
#else
#define SERVER_URL @"https://test.bestpay.cn/" //測(cè)試環(huán)境地址
#endif
這樣使用的時(shí)候贯莺,上面那個(gè)serverURL的獲取就簡(jiǎn)單多了
- (NSURL *)serverURL {
NSURL* url = [NSURL URLWithString:SERVER_URL] ;
return url ;
}
二、Configurations(配置)的使用
上面我們使用宏來(lái)控制代碼宁改,下面我們用configuration來(lái)控制宏缕探,其實(shí)也是在不同的配置項(xiàng)里預(yù)置了不同的宏。
如圖还蹲,Xcode為每個(gè)工程預(yù)置了一個(gè)Debug和Release的配置爹耗,我們可以點(diǎn)擊下面的+按鈕來(lái)duplicate(復(fù)制)更多的配置,然后給不同的配置不同的參數(shù)谜喊。
這是我們工程里配置的潭兽,很傻很天真的我,分出這些可愛(ài)的名字斗遏,不過(guò)一看就知道意思了吧??
然后點(diǎn)擊“Build Settings”標(biāo)簽山卦,你應(yīng)該注意到這邊的配置項(xiàng),每一項(xiàng)都可以單獨(dú)給剛剛我們復(fù)制的那個(gè)configuration來(lái)配置诵次,比如
我們找到自定義宏的配置账蓉,來(lái)預(yù)置了一些宏:
這樣我們,在代碼里逾一,就可以這么寫了铸本,下面就是一個(gè)栗子??哈,請(qǐng)忽略文字內(nèi)容
#if DEBUG299
#define kTEXT @"企業(yè)賬號(hào)開(kāi)發(fā)調(diào)試"
#elif DEBUG99
#define kTEXT @"個(gè)人賬號(hào)開(kāi)發(fā)調(diào)試"
#elif RELEASE_299_INHOUSE
#define kTEXT @"企業(yè)賬號(hào)打包"
#elif RELEASE_99_ADHOC
#define kTEXT @"個(gè)人賬號(hào)AdHoc打包"
#elif RELEASE_99_APPSTORE
#define kTEXT @"發(fā)布APPSTORE"
#endif
NSLog(@"TEXT:%@", kTEXT) ;
我們還可以添加我們自定義的build setting 選項(xiàng)遵堵,比如箱玷,我們實(shí)現(xiàn)不同的配置怨规,不同的APP名稱,你可以這樣汪茧,點(diǎn)擊那個(gè)+號(hào)椅亚,選擇“Add User-Defined Setting”
使用的時(shí)候,選擇Target舱污,在Info里使用即可:
我們針對(duì)不同的Configuration配置了不同的APP名稱呀舔,和打印不同的字符串,那如何使用呢扩灯?
三媚赖、在Scheme中使用Configuration
點(diǎn)擊“Edit Scheme”進(jìn)入下圖這個(gè)頁(yè)面,左邊選項(xiàng)是Run珠插,或者Archive惧磺,右邊都會(huì)有一個(gè)Build Configuration的選項(xiàng),選擇不同的Configuration捻撑,就會(huì)有不同的效果了磨隘。
也許你會(huì)覺(jué)得,這樣切來(lái)切去比較麻煩顾患,你可以在Manage Scheme界面番捂,Duplicate多個(gè)Scheme來(lái)對(duì)應(yīng)不同的Configuration,這樣只要切換Scheme就好了
然后分別給不同的Scheme選擇對(duì)應(yīng)的Configuration即可江解。
四设预、Jenkins打包
我們配置好了工程,開(kāi)發(fā)的時(shí)候方便了許多犁河,下一步我們配置Jenkins來(lái)實(shí)現(xiàn)打包鳖枕,這樣測(cè)試同學(xué)就不用盯著小開(kāi)發(fā)們要包了,下面實(shí)在mac系統(tǒng)上的操作桨螺,其他系統(tǒng)沒(méi)有做嘗試宾符。
首先去官網(wǎng)下載軟件安裝,https://jenkins.io/download/灭翔,安裝你就按照一步一步安裝吧吸奴,好像沒(méi)有遇見(jiàn)什么問(wèn)題。按照提示操作好了缠局,有問(wèn)題的下面評(píng)論吧。下面講述登錄進(jìn)去后的一些常用配置考润。
1狭园、插件
我們沒(méi)有安裝很多插件,除了系統(tǒng)默認(rèn)的糊治,基本是用一個(gè)安裝一個(gè)唱矛,下面列出一些插件,僅供參考
Git Parameter Plug-In 這個(gè)插件可以在打包前選擇你的GIT分支,挺好用的绎谦。
description setter plugin 這個(gè)可以把打包的結(jié)果管闷,展示出來(lái),比如顯示一個(gè)二維碼窃肠。
Role-based Authorization Strategy 這個(gè)是權(quán)限管理的包个,可以給用戶分配一些權(quán)限,自己看著用冤留。
2碧囊、憑據(jù)
需要拉代碼,首先需要設(shè)置憑據(jù)纤怒,可以在:Jenkins -> 憑據(jù) -> 域名 -> 添加憑據(jù)糯而。(如果沒(méi)有域,可以新增一個(gè)域)
我們的GIT使用SSH來(lái)授權(quán)的泊窘,所以這里直接填寫Private Key即可熄驼。這樣就可以拉代碼了。
3烘豹、添加任務(wù)
添加一個(gè)任務(wù)瓜贾,
4、配置參數(shù)
這是GIT參數(shù)吴叶,可以過(guò)濾和選擇不同的分支阐虚,還可以快速的搜索分支。
上圖是打包選項(xiàng)蚌卤,為了方便实束,我們分別對(duì)應(yīng)我們創(chuàng)建的那5個(gè)Scheme。
5逊彭、GIT配置
直接看圖吧
6咸灿、構(gòu)造腳本
我們直接選擇了用shell腳本來(lái)構(gòu)造了,主要腳本如下:
#進(jìn)入工程文件夾
cd OrangeLoans
#設(shè)置一些
Workspace="OrangeLoans"
Target="OrangeLoans"
#獲取當(dāng)前時(shí)間侮叮,然后一個(gè)文件夾名稱
Nowtime=$(date +%Y%m%d_%H%M%S)
FileFolder=${Target}_${Nowtime}
#這是我的上傳說(shuō)明
UploadDesc="OrangeLoans"
#打包選項(xiàng)避矢,針對(duì)不同的選項(xiàng),設(shè)置了不同的Configuration和Scheme
if [ ${Archive_Type} == "Enterprise_Test" ]
then
Configuration="Release299InHouse"
Scheme="InHouse299"
UploadDesc="企業(yè)測(cè)試"
elif [ ${Archive_Type} == "Enterprise_Dev" ]
then
Configuration="Debug299"
Scheme="Dev299"
UploadDesc="企業(yè)開(kāi)發(fā)"
elif [ ${Archive_Type} == "Person_Dev" ]
then
Configuration="Debug99"
Scheme="Dev99"
UploadDesc="個(gè)人開(kāi)發(fā)"
elif [ ${Archive_Type} == "Person_AdHoc" ]
then
Configuration="Release99AdHoc"
Scheme="AdHoc99"
UploadDesc="個(gè)人AdHoc包"
elif [ ${Archive_Type} == "Person_AppStore" ]
then
Configuration="Release99AppStore"
Scheme="AppStore99"
UploadDesc="上傳AppStore包"
else
echo "沒(méi)有符合的條件"
fi
#這是導(dǎo)出包的時(shí)候囊榜,需要一個(gè)exportOptionsPlist文件审胸,這是文件地址
exportOptionPath="/Users/Shared/Jenkins/Home/workspace/exportOptions/OrangeLoans/export_${Archive_Type}.plist"
#echo ${Target}
#echo ${Workspace}
#echo ${Configuration}
#echo ${Scheme}
#echo ${exportOptionPath}
#echo ${Nowtime}
#echo ${FileFolder}
#build之前clean一下
xcodebuild -workspace ./${Workspace}.xcworkspace -scheme ${Scheme} clean
#打包編譯
xcodebuild -workspace ./${Workspace}.xcworkspace -scheme ${Scheme} -configuration ${Configuration} -archivePath ./build/${Target}.xcarchive archive
#導(dǎo)出包
xcodebuild -exportArchive -archivePath ./build/${Target}.xcarchive -exportPath ./build/${FileFolder} -exportOptionsPlist ${exportOptionPath}
downloadDesc=${UploadDesc}-${Select_Branch}
if [ -n "$app_download_desc" ]; then
downloadDesc=${app_download_desc}
fi
#這是上傳我們自己服務(wù)器的,以實(shí)現(xiàn)在線下載
result=$(curl -k -F package=@./build/${FileFolder}/OrangeLoans.ipa -F changelog=${downloadDesc} https://www.bestpay.com.cn)
#上傳返回的結(jié)果是一個(gè)json卸勺,里面有一個(gè)地址砂沛。獲取那個(gè)地址
uuid=$(echo ${result} | /usr/local/bin/jq .guid)
uuuu=${uuid:1:36}
downloadURL='itms-services://?action=download-manifest&url=https://www.bestpay.com.cn/plist/'${uuuu}
#這是網(wǎng)上找的一個(gè)生產(chǎn)二維碼圖片的應(yīng)用,在https://github.com/sylnsfar/qrcode
/usr/local/bin/myqr ${downloadURL} -n 'download_ipa_qr.png' -d ./build/
這樣就打包完成啦曙求,上傳也完成啦碍庵,下載二維碼圖片也完成啦映企,啦啦啦
7、其他
關(guān)于exportOptionsPlist文件静浴,你導(dǎo)出包的時(shí)候堰氓,會(huì)有一這么文件,就是ExportOptions.plist文件苹享,這里會(huì)記錄你導(dǎo)出包的時(shí)候比如provisioningProfiles双絮、teamID、Bitcode選項(xiàng)富稻、簽名證書(shū)等選項(xiàng)掷邦。直接拖過(guò)去用就好。
關(guān)于provisioningProfiles文件椭赋,你可以從你的Xcode的目錄復(fù)制過(guò)去抚岗,在路徑:
# xcode目錄
~/資源庫(kù)/MobileDevice/Provisioning Profiles/
#Jenkins里的目錄
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles/
作者簡(jiǎn)介
目前就職于甜橙金融(翼支付)信息技術(shù)部,負(fù)責(zé)iOS的技術(shù)研發(fā)工作哪怔。