(iOS)自定義打包上傳

推薦一個(gè)自動(dòng)化打包的工具套件穷躁,提供一個(gè)運(yùn)行良好的持續(xù)部署流程法挨,只需要運(yùn)行一個(gè)簡(jiǎn)單的命令就可以觸發(fā)這個(gè)流程全闷。下面是Github地址

https://github.com/fastlane/fastlane

出于初始化的時(shí)候需要賬號(hào)密碼蔼水,所以只是簡(jiǎn)單的使用它打包了項(xiàng)目,后續(xù)貼出fastlane的實(shí)踐步驟。


當(dāng)然了蚤假,根據(jù)自己的需求寫了一個(gè)打包以及上傳的腳本栏饮,大致思路為:

1.使用xcodebuild進(jìn)行打包

2.備份打包過程中的文件

3.上傳打包文件到公司服務(wù)器


現(xiàn)在就上面幾個(gè)步驟貼出完整步驟(由于涉及公司名稱,所以有些地方修改了下名稱):

1.由于涉及到自動(dòng)生成plist文件等磷仰,所以單獨(dú)拿出來一個(gè)文件放配置信息袍嬉,

iOS_Config.sh :

software-package^https://app.xxxxxx.com/app/TestProject/iOS/^提示內(nèi)容^1.222^software^com.chenzhe.test^/xx/yy/TestProject/iOS^/xx/plist/TestProject

software-package , software 這兩個(gè)不用修改,plist文件里面需要的

https://app.xxxxxx.com/app/TestProject/iOS/ 這是ipa包存放的前綴地址

提示內(nèi)容灶平,1.222伺通,com.chenzhe.test 這三個(gè)分別是企業(yè)證書下載時(shí)彈出的提示文本,plist文件中app的版本號(hào)民逼,plist文件中app的BundleID

/xx/yy/TestProject/iOS泵殴,/xx/plist/TestProject 這兩個(gè)分別代表ipa的服務(wù)器絕對(duì)地址和plist文件的絕對(duì)地址

以上配置對(duì)于企業(yè)證書打包很重要,因?yàn)闀?huì)自動(dòng)生成plist文件拼苍,對(duì)于Store的只需要最后打出的ipa包即可笑诅。


2.配置啟動(dòng)腳本,因?yàn)橐c真正的打包腳本分開疮鲫,所以吆你,iOS_Build.sh是單獨(dú)的shell腳本,傳入?yún)?shù)后觸發(fā)打包腳本俊犯。

iOS_Build.sh

#/bin/bash

#cd到項(xiàng)目目錄下

cd $4

#檢查以及修改配置文件信息妇多,可注釋

`open serviceConfig.sh`;

echo "檢查完畢并立即執(zhí)行?y/n";

read result;

if [ "$result" != "y" ]

then

echo '無效命令,請(qǐng)重新運(yùn)行';

exit;

fi

#開始執(zhí)行打包腳本

echo "/***? ? ? ? ? ? ? ? ? ? ? ? ? 打包中,請(qǐng)勿關(guān)閉...";

source $4/iOS_Archive.sh $1 $2 $3 $4 $5;

echo "***? ? ? ? ? ? ? ? ? ? ? ? ? ? 打包結(jié)束,可關(guān)閉/";

大致步驟為打開配置文件信息進(jìn)行核對(duì)燕侠,當(dāng)然不需要的話可以自行注釋掉者祖,然后就傳入基本參數(shù)進(jìn)行腳本打包。

3.執(zhí)行打包腳本

iOS_Archive.sh

#!/bin/bash

#1.工程名 2.當(dāng)前工程描述文件名稱 3.打包后的IPA名 4.腳本所在目錄地址(也就是項(xiàng)目路徑) 5.commit號(hào)绢彤,后續(xù)開放

#################################################配置信息#################################################

#獲取當(dāng)前用戶名以及時(shí)間戳

userName=`whoami`

timeVar=`date +%Y-%m-%d-%H-%M`

#獲取配置信息

aTemp=""

filePath=`pwd`

plistName=$3

while read line

do

aTemp=$line

done < "$filePath/iOS_Config.sh"

IFS='^'

argsArray=($line)

#basePath 打包文件備份根路徑

#toolArchivePath 將Archive文件保存到原目錄七问,比如說友盟做崩潰日志收集等使用(如果Xcode改名的話自己一定要修改下面的Xcode參數(shù))

basePath="/Users/$userName/Desktop"

toolArchivePath="/Users/$userName/Library/Developer/Xcode"

if [ ! -d "/Users/$userName/Desktop" ]

then

basePath="/Users/admin/Desktop";

toolArchivePath="/Users/admin/Library/Developer/Xcode"

fi

#ipaPath 打包文件備份實(shí)際存放路徑

ipaPath="$basePath/IOSProject/$1/$timeVar"

#提示用戶信息,5秒后進(jìn)行打包

printf "\e[31m %-50s\e[0m\n" "打包工程名:? ? ? ? ? ? ? ? ? ? ? ? $1";

printf "\e[31m %-50s\e[0m\n" "BundleID:? ? ? ? ? ? ? ? ? ? ? ? ? ${argsArray[5]}";

printf "\e[31m %-50s\e[0m\n" "描述文件名稱:? ? ? ? ? ? ? ? ? ? ? $2";

printf "\e[31m %-50s\e[0m\n" "項(xiàng)目版本號(hào):? ? ? ? ? ? ? ? ? ? ? ? ${argsArray[3]}";

printf "\e[31m %-50s\e[0m\n" "項(xiàng)目路徑:? ? ? ? ? ? ? ? ? ? ? ? ? $4";

printf "\e[31m %-50s\e[0m\n" "ipa文件所在服務(wù)器路徑:? ? ? ? ? ? ${argsArray[1]}$plistName.ipa";

printf "\e[31m %-50s\e[0m\n" "plist文件所在服務(wù)器路徑:? ? ? ? ? ${argsArray[1]}$plistName.plist";

printf "\e[31m %-50s\e[0m\n" "下載描述信息:? ? ? ? ? ? ? ? ? ? ? ${argsArray[2]}";

echo "請(qǐng)確認(rèn)信息,5秒后開始打包......";

sleep 5;

#################################################打包工作#################################################

#刪除可能存在的緩存包

rm -rf "./$3.ipa"

rm -rf "./$3.plist"

rm -rf "./$timeVar.xcarchive"

#使用xcodebuild進(jìn)行打包,默認(rèn)采取靜默方式,有額外需求自行添加(比如有多個(gè)Target的項(xiàng)目茫舶,自行添加-target等等)

#workspace 工作空間

#scheme 項(xiàng)目Scheme

#archivePath Archive路徑

xcodebuild clean build -configuration Release -workspace "$1.xcworkspace" -scheme $1 -archivePath "./$timeVar.xcarchive" archive;

xcodebuild -exportArchive -exportFormat IPA -archivePath "./$timeVar.xcarchive" -exportPath "./$3.ipa" -exportProvisioningProfile $2;

除了xcodebuild那兩行械巡,上面的基本工作就是配置基本路徑信息,比如備份文件存儲(chǔ)的地址等饶氏,紅色提示用戶打包基本信息進(jìn)行核對(duì)讥耗,然后archive以及生成ipa文件。

然后生成plist文件:

#生成plist文件initPlist() {echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "items">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "assets">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "kind">> "$plistName.plist"echo "${argsArray[0]}">> "$plistName.plist"echo "url">> "$plistName.plist"echo "${argsArray[1]}$plistName.ipa">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "metadata">> "$plistName.plist"echo "">> "$plistName.plist"echo "bundle-identifier">> "$plistName.plist"echo "${argsArray[5]}">> "$plistName.plist"echo "bundle-version">> "$plistName.plist"echo "${argsArray[3]}">> "$plistName.plist"echo "kind">> "$plistName.plist"echo "${argsArray[4]}">> "$plistName.plist"echo "title">> "$plistName.plist"echo "${argsArray[2]}">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "">> "$plistName.plist"echo "}">> "$plistName.plist"}

initPlist $plistName "$filePath/$plistName.plist";

#創(chuàng)建原目錄文件夾

mkdir -p "$toolArchivePath/toolArchives/$1/$timeVar"

然后是打包后的后續(xù)操作了疹启,比如上傳到服務(wù)器上或者分發(fā)到別的渠道等:

#################################################分發(fā)項(xiàng)目包#################################################

#供用戶選擇

Excute_Page=(

[0]='1'

[1]='2'

)

Excute_Handler=(

[0]='上傳到SFTP服務(wù)器'

[1]='退出'

)

Excute_Count=${#Excute_Page[@]}

#輸出用戶選項(xiàng)

screen_echo() {

printf "%-7s |" '序號(hào)'

printf "%-30s\n" '執(zhí)行操作'

for((i=0; i<$Excute_Count; ++i))

do

printf "\e[31m %-5s\e[0m" `expr $i + 1`

printf "\033[36m %-30s \033[0m\n" "${Excute_Handler[$i]}"

done

}

screen_echo

#創(chuàng)建備份目錄

mkdir -p $ipaPath

read -p '請(qǐng)輸入要登陸的服務(wù)器序號(hào)(非以上選項(xiàng)都以退出處理): ' Excute_Number

echo ${Excute_Number};

#執(zhí)行用戶選擇

if [ ${Excute_Number} -eq '1' ];

then

#上傳ipa plist等文件到服務(wù)器上

`$4/iOS_Dispatch.sh ${argsArray[6]} $4 $plistName ${argsArray[7]}`

elif [ ${Excute_Number} -eq '2' ];

then

`open $ipaPath`

else

echo "輸入錯(cuò)誤,退出";

`open $ipaPath`

fi

#################################################后續(xù)收尾工作################################################

#拷貝文件到備份目錄下去

cp "$4/$3.ipa" $ipaPath

cp "$4/$3.plist" $ipaPath

cp -R "$4/$timeVar.xcarchive" $ipaPath

cp -R "$4/$timeVar.xcarchive" "$toolArchivePath/toolArchives/$1/$timeVar"

#刪除文件

rm -rf "$4/$3.ipa"

rm -rf "$4/$3.plist"

rm -rf "$4/$timeVar.xcarchive"

暫時(shí)只滿足了上傳到服務(wù)器和直接打開下載包地址的功能古程,如果有自己分發(fā)渠道的可以自行添加選項(xiàng):

Excute_Handler=(

[0]='上傳到SFTP服務(wù)器'

[1]='退出'

)

4.上傳到服務(wù)器

由于第三步用戶已經(jīng)選擇了上傳到服務(wù)器,這里只需要實(shí)現(xiàn)自己的上傳腳本即可喊崖,后面的腳本命令就不貼出來了挣磨。


以上基本就簡(jiǎn)單實(shí)現(xiàn)了基本的打包以及分發(fā)的功能菲宴,不是很完善,后續(xù)有時(shí)間會(huì)持續(xù)更新趋急。


差點(diǎn)忘了,因?yàn)槲沂巧蟼鞯轿覀児镜膄tp服務(wù)器上势誊,所以推薦一個(gè)mac的軟件

brew install lftp

如果你是升級(jí)到新系統(tǒng)或者Sierra這些呜达,而且brew 也搜索不到lftp的話,可以使用:

brew install homebrew/boneyard/lftp

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粟耻,一起剝皮案震驚了整個(gè)濱河市查近,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挤忙,老刑警劉巖霜威,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異册烈,居然都是意外死亡戈泼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門赏僧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大猛,“玉大人,你說我怎么就攤上這事淀零⊥旒ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵驾中,是天一觀的道長(zhǎng)唉堪。 經(jīng)常有香客問我,道長(zhǎng)肩民,這世上最難降的妖魔是什么唠亚? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮此改,結(jié)果婚禮上趾撵,老公的妹妹穿的比我還像新娘。我一直安慰自己共啃,他們只是感情好占调,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著移剪,像睡著了一般究珊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纵苛,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天剿涮,我揣著相機(jī)與錄音言津,去河邊找鬼。 笑死取试,一個(gè)胖子當(dāng)著我的面吹牛悬槽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞬浓,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼初婆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了猿棉?” 一聲冷哼從身側(cè)響起磅叛,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萨赁,沒想到半個(gè)月后弊琴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杖爽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年敲董,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慰安。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡臣缀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泻帮,到底是詐尸還是另有隱情精置,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布锣杂,位于F島的核電站脂倦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏元莫。R本人自食惡果不足惜赖阻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望踱蠢。 院中可真熱鬧火欧,春花似錦、人聲如沸茎截。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽企锌。三九已至榆浓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撕攒,已是汗流浹背陡鹃。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工烘浦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萍鲸。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓闷叉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脊阴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子片习,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 起初想法: 基于公司原有的Jenkins服務(wù)的基礎(chǔ)上,最近在公司自動(dòng)化打包的時(shí)蹬叭,遇到一個(gè)尷尬的問題?為什么不能直接...
    Evans_Xiao閱讀 3,779評(píng)論 0 3
  • 前言 自動(dòng)化(Automation)是指機(jī)器設(shè)備状知、系統(tǒng)或過程(生產(chǎn)秽五、管理過程)在沒有人或較少人的直接參與下,按照人...
    秦明Qinmin閱讀 2,495評(píng)論 1 12
  • 前言 眾所周知饥悴,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王坦喘,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的西设。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 8,948評(píng)論 34 59
  • 前言 眾所周知瓣铣,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段贷揽。用戶們都是很挑剔的棠笑。如果一個(gè)公司的推廣...
    閑云清煙閱讀 2,509評(píng)論 1 4
  • 使用xcodebuild和xcrun打包簽名 要構(gòu)建Xcode項(xiàng)目,可以從包含項(xiàng)目的目錄(即包含名稱的目錄)運(yùn)行x...
    花椒不麻牙閱讀 443評(píng)論 1 0