以前寫的 iOS如何實現API環境自動部署文章對於部分人來講可能以爲沒什麼太大的意義,畢竟對大部分公司來講可能只有一我的負責開發,不須要考慮分支切換(版本更新,臨時需求或問題修復上線等問題),接下來這篇文章將是 對iOS環境實現自動化部署最實用性的配套--自動化構建。git
本次自動化構建基於 jenkins
jenkins下載地址: jenkins.io/zh/
根據我的愛好選擇喜歡的安裝方式,jar或dmg,安裝好後,登陸localhost:8080,根據文檔設置管理帳號,安裝推薦插件,還須要到插件管理中搜索安裝Xcode integration插件 (Jenkins - Manage Jenkins - Manage Plugins)github
插件安裝好後,新建任務輸入任務名稱(將會成爲拉下來項目的目錄名稱),選擇構建一個多配置項目,而後點擊肯定,以下圖所示shell
建立任務成功後進入到配置頁接下來直接到 構建 部分,選擇Execute shell,採用腳本進行構建, 腳本內容以下xcode
#!/bin/sh
#export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
#項目路徑,jenkins環境下的項目所在路徑,
# /Users/你的電腦名稱/.jenkins/workspace/項目名稱(此處項目名稱與jenkins上的一致)
projectDir=/Users/xxx/.jenkins/workspace/AutoDemo
#打包須要的ExportOptions.plist文件路徑
#ExportOptions.plist的內容能夠經過xcodebuild -help瞭解
exportOptionsPlistPath=${projectDir}/ExportOptions.plist
#項目名稱,工程名稱
projectName=AutoDemo
#編譯的方式,默認爲Release,還有Debug等
buildConfig=Release
#日誌log文件/導出安裝包的目錄路徑
buildAppToDir=/Users/xxx/Desktop/demoIpa
#項目的Info.plist路徑
infoPlist=${projectDir}/${projectName}/Info.plist
#因爲jenkins拉下來的項目沒法獲取到分支名,這裏進行手動修改配置
#GIT_BRANCH 是jenkins提供的變量名,獲得分支名稱
/usr/libexec/PlistBuddy -c "Set :GitCommitBranch ${GIT_BRANCH/#origin\//}" $infoPlist
mkdir -pv $buildAppToDir
logPath=$buildAppToDir/$projectName-$buildConfig.log
###############
mkdir -pv $buildAppToDir
#用到cocoapods,須要更新Pods的執行下命令,不須要則可註釋
#cd $projectDir
#pod install
###############開始編譯app
echo "分支名稱: ${GIT_BRANCH/#origin\//}" >>$logPath
#編譯前先clean
xcodebuild clean
#使用cocoapods的項目 workspace的,則執行此行
# xcodebuild -workspace ${projectDir}/${projectName}.xcworkspace -scheme ${projectName} -configuration $buildConfig -sdk iphoneos -archivePath $buildAppToDir/$projectName.xcarchive archive
#project,非workspace項目執行此行
xcodebuild -project ${projectDir}/${projectName}.xcodeproj -scheme ${projectName} -configuration $buildConfig -sdk iphoneos -archivePath $buildAppToDir/$projectName.xcarchive archive
#判斷編譯結果
if test $? -eq 0
then
echo "~~~~~~~~~~~~~~~~~~~編譯成功~~~~~~~~~~~~~~~~~~~" >>$logPath
else
echo "~~~~~~~~~~~~~~~~~~~編譯失敗~~~~~~~~~~~~~~~~~~~" >>$logPath
echo "\n" >>$logPath
exit 1
fi
###############開始打包成.ipa
ipaName="`date +%Y%m%d%-H:%m:%s`"
echo "安裝包名稱:${ipaName}" >>$logPath
echo "開始打包$projectName.xcarchive成ipa....." >>$logPath
xcodebuild -exportArchive -archivePath ${buildAppToDir}/${projectName}.xcarchive -exportPath ${buildAppToDir}/${ipaName} -exportOptionsPlist ${exportOptionsPlistPath} -allowProvisioningUpdates
if test $? -eq 0
then
#statements
echo "打包${projectName}的ipa包成功" >>$logPath
else
echo "打包${projectName}的ipa包失敗" >>$logPath
exit 1
fi
複製代碼
項目GitScript修改, 適配jenkins中獲取到分支名稱爲空到問題,以下圖bash
因爲使用到是腳本打包,在部署jenkins環境的電腦上Xcode-Accounts中登陸咱們的開發者帳號,同時咱們的項目中須要ExportOptions.plist, 打包用到配置文件,想要了解更多關於ExportOptions.plist的鍵值能夠經過終端輸入xcodebuild -help進行查看,基本內容以下圖 app
項目準備好後(推送到git倉庫),jenkins配置後,執行Build Now便可進行構建,或者觸發器觸發後會自動進行構建,構建完成後的目錄以下iphone
我的認爲無論一人仍是多人同時開發,都應保持良好的分支管理習慣,這樣才能從容的應對產品不斷變化的需求,以及觸不及防的bug....post
因爲jenkins用的很少,寫的衝忙,有不對的地方歡迎你們指出ui
示例項目AutoDemospa