前言
現(xiàn)在網(wǎng)上有很多自動(dòng)化打包的腳本央拖,上網(wǎng)搜索一下就有這么些個(gè)祭阀,眼花繚亂,大多是使用xcodebuild命令鲜戒,或者在Jenkins上面部署专控,方便實(shí)用。
打包方式
1 自動(dòng)化腳本打包
無論是jekins部署還是使用xcodebuild指令的shell腳本都是不錯(cuò)的選擇遏餐÷赘可以自行g(shù)oogle ,網(wǎng)上很多類似的案例失都。
2 Apple推薦的方式
使用xcode的archive功能:Product -> Archieve -> Export
3 手動(dòng)build打包 (推薦指數(shù)五星)
(1) 手動(dòng)編譯柏蘑,生成 .app 文件
(2) 把 .app 文件放在名字為 Payload 文件夾下
(3) 壓縮文件夾,生成 .zip 文件
(4) 修改文件名:.zip -> ipa粹庞,打包完成
(5) 登陸各個(gè)平臺(蒲公英咳焚,fir等),把本地的ipa包上傳
*******************畫重點(diǎn)***********************
這里有小弟自己寫的一個(gè)上傳腳本庞溜,地址在此:上傳ipa腳本地址
只需要編譯一下工程革半,生成.app文件,再配置一下腳本中的參數(shù)即可,一鍵上傳ipa包又官,具體步驟如下:
- 1 如果是上傳fir平臺延刘,把isFir變量更改為fir;上傳蒲公英平臺則改成pyger
- 2 desktop參數(shù)改成自己本地的路徑(本來是想使用絕對路徑的六敬,但是后面會(huì)報(bào)錯(cuò)碘赖,新手一枚不知道怎么解決,所以觉阅。崖疤。),如 ="/Users/用戶名"
- 3 appFileFullPath 路徑改成你自己項(xiàng)目build + b 之后 .app 文件的路徑即可(設(shè)備選擇 generic ios device)
- 4 如果是蒲公英平臺的話: 需要獲取ukey和apikey兩個(gè)參數(shù) 典勇,具體可以參照蒲公英獲取ukey和apikey頁面劫哼,updateDescription參數(shù)是本更新內(nèi)容;如果是上傳到fir平臺割笙,則需要apiToken參數(shù)权烧,可以去fir平臺自行獲取,projectDir是此次更新內(nèi)容
- 5 注意一下伤溉,如果是是上傳fir平臺的話般码,首先要登陸一下 打開終端 輸入fir login API Token (API Token 就是平臺上獲取的token)如果出現(xiàn)了success等字樣說明登陸成功 ,然后還需要安裝fir-cli工具乱顾,也很簡單 終端輸入sudo gem install -n /usr/local/bin fir-cli --no-ri --no-rdoc 等待完成即可
遵從以上步驟之后板祝,打開終端,輸入 sh + 腳本文件路徑 (可以直接把文件拖動(dòng)到終端中即可)等待完成即可
代碼在此:
# ************************ 相關(guān)參數(shù)配置(蒲公英和fir 二選一) **************************
# 設(shè)置是使用fir上傳(改成fir)還是蒲公英上傳pgyer(改成pgyer) --
isFir="fir"
# 換算成自己主文件路徑 --(使用絕對路徑報(bào)錯(cuò)走净,不知道為何)--
desktop="/Users/自己的用戶名"
# .app 文件的路徑
appFileFullPath="自己的.app文件路徑券时,如下"
#appFileFullPath="$desktop/Library/Developer/Xcode/DerivedData/FirTextExmple-aqjhktrtgzvszeevtcsdjrypkvfs/Build/Products/Debug-iphoneos/FirTextExmple.app"
# 蒲公英的參數(shù): 自行填寫自己賬號對應(yīng)的key值 上傳文檔地址:https://www.pgyer.com/doc/api#uploadApp
uKey="自己的uKey,獲取方式上面鏈接"
apiKey="自己的apiKey伏伯,獲取方式上面鏈接"
# 蒲公英需要填寫的版本描述
updateDescription="這是一個(gè)測試路徑的版本"
# 上傳到fir時(shí)橘洞,運(yùn)行腳本之前要先登錄一下:fir login API Token。 出現(xiàn)成功字段即可
# fir的參數(shù):
#apiToken="62284d44d88e34c013e481184b409fb8"
apiToken="自己的apiToken"
#
projectDir="這是一個(gè)上傳測試fir的腳本描述"
# **************************************************
programBag="$desktop/Desktop/ProgramBag"
payloadPath="$desktop/Desktop/Payload"
#計(jì)時(shí)
SECONDS=0
uploadMethod() {
if [ $isFir == "fir" ]; then
# 或者上傳IPA到fir上面 -- 明天寫 --
echo "正在上傳到fir.im...."
fir publish "$programBag/Payload.ipa" -T "$apiToken" -c ${projectDir}
echo "\n????打包上傳更新成功说搅!"
#輸出總用時(shí)
echo "===總計(jì)用時(shí)為: ${SECONDS}s==="
rm -rf ${programBag}
else
echo "正在上傳到蒲公英...."
# 上傳IPA到蒲公英 file=@$programBag/Payload.ipa
curl -F "file=@$programBag/Payload.ipa" \
-F "uKey=$uKey" \
-F "_api_key=$apiKey" \
-F "updateDescription=$updateDescription" \
https://www.pgyer.com/apiv1/app/upload
if [ $? -eq 0 ]
then
echo "\n????上傳蒲公英成功"
echo "===總計(jì)用時(shí)為: ${SECONDS}s==="
rm -rf ${programBag}
else
echo "上傳蒲公英失敗"
fi
fi
}
mkdir -p ${payloadPath}
cp -r ${appFileFullPath} ${payloadPath}
mkdir -p ${programBag}
cp -r ${payloadPath} ${programBag} && rm -rf ${payloadPath}
cd ${programBag}
zip -q -r ./Payload.zip ./* && rm -rf Payload
if [ $? -eq 0 ]
then
mv Payload.zip Payload.ipa
echo "壓縮成功"
uploadMethod
else
echo "壓縮失敗"
fi
******************************************
結(jié)語
個(gè)人認(rèn)為自動(dòng)化打包腳本炸枣,打包的速度有點(diǎn)慢,因?yàn)樽詣?dòng)化的腳本一般都是封裝的xcodebuild指令弄唧,實(shí)際上和手動(dòng)打包的原理差不多适肠,用到了achive方法。(swift的項(xiàng)目可能會(huì)比oc的項(xiàng)目要編譯的慢一點(diǎn)候引,再加上一些代碼書寫問題可能就會(huì)更慢(多提一嘴迂猴,這里給swift項(xiàng)目開發(fā)的小伙伴安利一個(gè)檢測項(xiàng)目編譯時(shí)間的工具,很實(shí)用背伴,地址在此:BuildTimeAnalyzer-for-Xcode))
而且部署起來也稍稍有些麻煩,不錯(cuò)還好,一錯(cuò)就各種找不著頭腦(可能我在網(wǎng)上找的腳本都比較low傻寂,或者我比較low)息尺。
選擇第二種方式,手動(dòng)build 之后疾掰,生成.app 文件搂誉,然后運(yùn)行自己寫的腳本,是目前我覺得最省時(shí)最快捷的方式静檬。炭懊。由于是shell初學(xué),可能代碼寫的一般拂檩,旨在解決問題侮腹,哈哈(輕噴輕噴)。
對前端開發(fā)來說稻励,shell語言的學(xué)習(xí)可以在一些方面提高我們的開發(fā)效率父阻,畢竟人生苦短嘛!M椤加矛!
如果覺得能幫到您的,麻煩點(diǎn)個(gè)小星星煤篙,哈哈U謇馈!大家加油<巍?撩!