iOS工程配置與Jenkins打包

本文主要講解在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ù)置了不同的宏。


image.png

如圖还蹲,Xcode為每個(gè)工程預(yù)置了一個(gè)Debug和Release的配置爹耗,我們可以點(diǎn)擊下面的+按鈕來(lái)duplicate(復(fù)制)更多的配置,然后給不同的配置不同的參數(shù)谜喊。


image.png

這是我們工程里配置的潭兽,很傻很天真的我,分出這些可愛(ài)的名字斗遏,不過(guò)一看就知道意思了吧??
然后點(diǎn)擊“Build Settings”標(biāo)簽山卦,你應(yīng)該注意到這邊的配置項(xiàng),每一項(xiàng)都可以單獨(dú)給剛剛我們復(fù)制的那個(gè)configuration來(lái)配置诵次,比如
image.png

我們找到自定義宏的配置账蓉,來(lái)預(yù)置了一些宏:


image.png

這樣我們,在代碼里逾一,就可以這么寫了铸本,下面就是一個(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”


image.png

image.png

使用的時(shí)候,選擇Target舱污,在Info里使用即可:


image.png

我們針對(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ì)有不同的效果了磨隘。


image.png

也許你會(huì)覺(jué)得,這樣切來(lái)切去比較麻煩顾患,你可以在Manage Scheme界面番捂,Duplicate多個(gè)Scheme來(lái)對(duì)應(yīng)不同的Configuration,這樣只要切換Scheme就好了

image.png

然后分別給不同的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è)域)


image.png

我們的GIT使用SSH來(lái)授權(quán)的泊窘,所以這里直接填寫Private Key即可熄驼。這樣就可以拉代碼了。

3烘豹、添加任務(wù)

添加一個(gè)任務(wù)瓜贾,


image.png

4、配置參數(shù)

image.png

這是GIT參數(shù)吴叶,可以過(guò)濾和選擇不同的分支阐虚,還可以快速的搜索分支。

image.png

上圖是打包選項(xiàng)蚌卤,為了方便实束,我們分別對(duì)應(yīng)我們創(chuàng)建的那5個(gè)Scheme。

5逊彭、GIT配置

直接看圖吧


image.png

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ì)有一這么文件,
image.png

就是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ā)工作哪怔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宣蔚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子认境,更是在濱河造成了極大的恐慌胚委,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉信,死亡現(xiàn)場(chǎng)離奇詭異亩冬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)硼身,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門硅急,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人佳遂,你說(shuō)我怎么就攤上這事营袜。” “怎么了丑罪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵荚板,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吩屹,道長(zhǎng)跪另,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任煤搜,我火速辦了婚禮免绿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宅楞。我一直安慰自己针姿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布厌衙。 她就那樣靜靜地躺著距淫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婶希。 梳的紋絲不亂的頭發(fā)上榕暇,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音喻杈,去河邊找鬼彤枢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛筒饰,可吹牛的內(nèi)容都是我干的缴啡。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓷们,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼业栅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谬晕,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碘裕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后攒钳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帮孔,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年不撑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了文兢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡燎孟,死狀恐怖禽作,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揩页,我是刑警寧澤旷偿,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站爆侣,受9級(jí)特大地震影響萍程,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兔仰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一茫负、第九天 我趴在偏房一處隱蔽的房頂上張望具被。 院中可真熱鬧严嗜,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)熬苍。三九已至管嬉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間原探,已是汗流浹背乱凿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咽弦,地道東北人徒蟆。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像型型,于是被迫代替她去往敵國(guó)和親段审。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容