iOS自動化集成

前言

自動化(Automation)是指機器設備喇辽、系統(tǒng)或過程(生產(chǎn)掌挚、管理過程)在沒有人或較少人的直接參與下,按照人的要求菩咨,經(jīng)過自動檢測吠式、信息處理、分析判斷抽米、操縱控制特占,實現(xiàn)預期的目標的過程(摘自百科)。軟件自動化集成能夠提高軟件開發(fā)效率云茸,是快速迭代過程中必備利器是目。jenkins是目前用得比較廣的自動化工具。本來主要是使用jenkins+svn+xcode來構(gòu)建自動化集成環(huán)境标捺。

jenkins環(huán)境搭建

jenkins安裝

jenkins下載地址:https://jenkins.io/index.html下載下來是war包的形式(本次使用的是1.642.4版本)懊纳。jenkins自帶svn插件,如果倉庫使用的是Git亡容,可以安裝jenkins的Git插件嗤疯。

jenkinswar包有兩種安裝方法:

1.下載jenkins.war, 運行java -jar jenkins.war. 在OSX上默認已經(jīng)安裝了java環(huán)境,如果沒有可以先安裝java環(huán)境萍倡,在運行相關命令身弊。


2.將war包放在tomcat的webapps目錄中,運行tomcat。

jenkins啟動完畢后阱佛,在瀏覽器中輸入http://localhost:8080或http://127.0.0.1:8080或者本機IP加8080端口號帖汞,即可訪問jenkin web管理界面。

主界面如下凑术,功能劃分清晰明了翩蘸。


jenkins配置

1.創(chuàng)建任務(點擊新建 > 輸入項目名 > 選擇構(gòu)建多配置項目 > 點擊確認)

2.填寫描述信息

3.設置項目SVN地址

如果出現(xiàn)認證失敗,點擊enter credential 輸入用戶名密碼就行了(jenkin也支持其它兩種認證方式SSH以及HTTPS淮逊,根據(jù)情況來認證就行了)

4.設置shell腳本催首。(jenkin確實很強大除了shell還可以執(zhí)行其它的任務)

可以增加Execute shell的數(shù)量,也可以拖動進行排序泄鹏,確實是比較方便的郎任。

5.設置構(gòu)建后的處理。

在這里選擇郵件通知备籽,項目構(gòu)建失敗會收到郵件提醒舶治。

6.保存項目配置。

保存后主頁多了一個當前添加的構(gòu)建項目车猬。

你可以點擊All之后的添加按鈕添加試圖霉猛,這樣分類更明了。

7.啟動任務珠闰。

a.手動構(gòu)建惜浅。(點擊構(gòu)建按鈕,即可構(gòu)建項目伏嗜。)

構(gòu)建次數(shù)在歷史試圖可以查看

構(gòu)建的時候可以通過Console Output查看命令執(zhí)行結(jié)果坛悉。

自動構(gòu)建。(在配置項目的時候阅仔,配置觸發(fā)時間即可自動構(gòu)建吹散。可以每隔特定的時間八酒,檢查svn變更構(gòu)建,也可以定時構(gòu)建刃唐,很方便)

1.Poll SCM:定時檢查源碼變更(根據(jù)SCM軟件的版本號)羞迷,如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動作画饥。例如衔瓮,表達式中填寫H/15 H/30 H/45 * * * *將使Jenkins每隔15,30,45分鐘就檢查一次您源碼倉庫的變化。以下配置為每5分鐘執(zhí)行一次源碼檢查抖甘。

2.Build periodically:周期進行項目構(gòu)建(它不關心源碼是否發(fā)生變化)热鞍。以下設置為定時構(gòu)建任務。

注意:如果對定時任務設置不太清楚,可以點擊問號查看具體如何設置薇宠。

iOS自動化腳本

1.利用xcodebuild命令配合xcrun命令生成ipa文件偷办,并上傳到指定的svn目錄。

build_path="project path" #工程xcodeproj文件目錄

xcode_project="project.xcodeproj" #項目工程文件

target_name="iOS Demo" #要編譯的target

app_path="${build_path}/build/Release-iphoneos/Demo.app" #生成的.app文件路徑

dsymPath="dsym file path" #符號表保存目錄

PLIST_NAME="Info.plist" #plist文件路徑

bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${PLIST_NAME}.plist)

bundleID=$(/usr/libexec/PlistBuddy -c "print CFBundleIdentifier" ${PLIST_NAME}.plist)

sign_name="4NUGTCBY12" #簽名文件秘鑰

embed_name="iosdev.mobileprovision" #provision 文件路徑

more_argument="PROVISIONING_PROFILE=d449a8c6-94ea-2ec2-31b4-854627893c2f" #provision 文件uuid

ipa_build_time=$(date +"%Y_%m_%d_%H_%M")

ipa_name="${target_name}_V${bundleVersion}_${ipa_build_time}"

#組合打包命令

xcodebuild -project ${xcode_project} -sdk iphoneos -target ${target_name} -configuration Release ${more_argument} clean build || exit -2

xcrun_cmd='xcrun -sdk iphoneos packageapplication -v '${app_path}' -o '${ipa_path}/${ipa_name}.ipa

#增加–sign –embed

if [ "$sign_name" != "" ]; then

xcrun_cmd=${xcrun_cmd}' --sign '${sign_name}

echo "[[ add sign_name : $xcrun_cmd]]"

fi

if [ "$embed_name" != "" ]; then

xcrun_cmd=${xcrun_cmd}' --embed '${embed_name}

echo "[[ add embed_name : $xcrun_cmd]]"

fi

xcrun_cmd || exit -2

#保存更新DSYM文件

if [[ ! -d "${dsymPath}/${bundleID}" ]]; then

mkdir -p "${dsymPath}/${bundleID}"

fi

echo "[[[========= 開始拷貝DSYM文件 =========]]]"

cp -R "${build_path}/build/Release-iphoneos/Demo.app.dSYM" "${dsymPath}/${bundleID}/${bundleID}.dSYM"

#上傳到svn

echo "svn://127.0.0.1:3698/Production/iOS/${SVN_DIR}${ipa_name}.ipa"

svn delete --username user --password pass -m "delete old ipa" svn://127.0.0.1:3698/Production/iOS/${SVN_DIR}${ipa_name}.ipa

svn import --username user --password pass -m "new Import ipa" ${ipa_path}/${ipa_name}.ipa svn://127.0.0.1:3698/Production/iOS/${SVN_DIR}${ipa_name}.ipa || exit -1

注意:在編譯的時候可能出現(xiàn)以下錯誤:

解決辦法

a.運行xcrun -sdk iphoneos -f PackageApplication澄港,獲取PackageApplication文件目錄

b.以文本的方式打開PackageApplication文件椒涯,做如下修改

my@codesign_args;

if(-e'$destApp/ResourceRules.plist'){# If ResourceRules.plist exists, include it in codesign arguments, for backwards compatability

@codesign_args=("/usr/bin/codesign","--force","--preserve-metadata=identifier,entitlements,resource-rules",

"--sign",$opt{sign},

"--resource-rules=$destApp/ResourceRules.plist");

}else{# If ResourceRules.plist isn't found, don't include it in the codesign arguments

@codesign_args=("/usr/bin/codesign","--force","--preserve-metadata=identifier,entitlements",

"--sign",$opt{sign});

}

2.利用xcodebuild生成ipa文件。

#導出xcarchive文件

xcodebuild archive -project MyApp.xcodeproj -scheme MyApp -archivePath MyApp.xcarchive

#利用xcarchive導出ipa文件

xcodebuild -exportProvisioningProfile "${PROVISIONING_PROFILE_NAME}" -exportArchive -exportFormat IPA -archivePath "MyApp.xcarchive" -exportPath "$IPA_DIR/MyApp.ipa" CODE_SIGN_IDENTITY="${SIGNING_IDENTITY}"

注意:目前的 Xcode 7 中此命令的使用已經(jīng)變成使用 -exportOptionsPlist 的參數(shù)形式了回梧。這種形式支持 bitcode 的功能废岂。

#Xcode7中導出ipa包

xcodebuild -exportArchive -archivePathMyApp.xcarchive-exportPath"$IPA_DIR/MyApp.ipa”-exportOptionsPlist $exportOptionsPlist

OptionsPlist 例子:


http://www.apple.com/DTDs/PropertyList-1.0.dtd">

teamID

MYTEAMID123

method

app-store

uploadSymbols

OptionsPlist 相關參數(shù)(更多參數(shù)可以使用xcodebuild --help命令查看)


自動化構(gòu)建

在配置好jenkins,并編寫好打包腳本以后狱意,即可在Execute shell中運行打包腳本湖苞,構(gòu)建成功后便會自動生成ipa文件并上傳到指定的svn地址或者構(gòu)建itms-services的安裝環(huán)境。通過自動化大大簡化了打包操作详囤,終于可以利用這個時間寫寫文章了财骨,感謝jenkins。

參考資料:

1.http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts/

2.http://www.matrixprojects.net/p/xcodebuild-export-options-plist/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纬纪,一起剝皮案震驚了整個濱河市蚓再,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌包各,老刑警劉巖摘仅,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異问畅,居然都是意外死亡娃属,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門护姆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矾端,“玉大人,你說我怎么就攤上這事卵皂≈让” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵灯变,是天一觀的道長殴玛。 經(jīng)常有香客問我,道長添祸,這世上最難降的妖魔是什么滚粟? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮刃泌,結(jié)果婚禮上凡壤,老公的妹妹穿的比我還像新娘署尤。我一直安慰自己,他們只是感情好亚侠,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布曹体。 她就那樣靜靜地躺著,像睡著了一般盖奈。 火紅的嫁衣襯著肌膚如雪混坞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天钢坦,我揣著相機與錄音究孕,去河邊找鬼。 笑死爹凹,一個胖子當著我的面吹牛厨诸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播禾酱,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼微酬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颤陶?” 一聲冷哼從身側(cè)響起颗管,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滓走,沒想到半個月后垦江,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡搅方,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年比吭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姨涡。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡衩藤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涛漂,到底是詐尸還是另有隱情赏表,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布匈仗,位于F島的核電站底哗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锚沸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一涕癣、第九天 我趴在偏房一處隱蔽的房頂上張望哗蜈。 院中可真熱鬧前标,春花似錦、人聲如沸距潘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽音比。三九已至俭尖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洞翩,已是汗流浹背稽犁。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骚亿,地道東北人已亥。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像来屠,于是被迫代替她去往敵國和親虑椎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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