iOS 一鍵自動(dòng)化打包腳本 normal armv7 arm64

首先,主要技術(shù)來自
博客: http://www.reibang.com/p/4281908243a3
膜拜大神,
感謝大神提供資源,順便是自己記錄及學(xué)習(xí)一下,抄一下作者的一些知識(shí)點(diǎn),方便自己學(xué)習(xí)記憶
首先提供一下腳本:在作者的基礎(chǔ)上有一點(diǎn)細(xì)節(jié)的修改,否則報(bào)錯(cuò)如下圖
報(bào)錯(cuò): normal armv7 normal arm64

image.png

其中大概步驟整理如下:

  1. 進(jìn)入工程所在目錄,創(chuàng)建xcodebuild.sh的腳本(名字自己自定義)
  2. 自己沒使用自動(dòng)打包的時(shí)候,之前使用手動(dòng)打包的方式成功之后,會(huì)有一個(gè)ExportOptions.plist,(不同的方式打包產(chǎn)生的plist不同,比如 appStore.ac-hoc,enterprise的方式都不同,如下圖,最簡單的就是直接復(fù)制一份)


    最簡單

其中企業(yè)版的內(nèi)容為:


image.png

其他的類型自己去看

3.然后自己copy下面的腳本內(nèi)容到xcodebuild.sh里面,根據(jù)自己的需求去修改下面的腳本,如果是workspace的工程就直接可以用,上面的腳本都有原作者的注釋,需要填的信息,挨個(gè)填一下就ok了,然后進(jìn)入當(dāng)前目錄,直接輸入 . xcodebuild.sh 就可以運(yùn)行腳本,如果提示沒有權(quán)限的話 可以直接給chomd + 777 sh文件地址,就可以了


image.png

選擇完之后,就可以坐等結(jié)果了

#author by heyujia (感謝原作者,我是小僧,修改了一丁點(diǎn))
#腳本所在的目錄必須和WorkSpace或者說工程主目錄所在的目錄在同一個(gè)目錄層級(jí)中

#配置參數(shù)

#workspace的名字逻炊,如果沒有則不需要這段話斋荞,我測試工程是一個(gè)工作空間所以就沒用押桃,如果需不需要要用的話恤批,還需要在編譯階段的腳本代碼里去掉  -workspace ${Project_Name}.xcworkspace
Workspace_Name="你的workSpace名字"


#工程名字
Project_Name="你的工程名字"


#配置打包方式Release或者Debug
Configuration="Release"



#基礎(chǔ)主路徑
BUILD_PATH=./build


#不同版本的基礎(chǔ)子路徑
#adHoc
ADHOC_PATH=${BUILD_PATH}/adHoc
#appStore
APPSTORE_PATH=${BUILD_PATH}/appStore
#enterprise
ENTERPRISE_PATH=${BUILD_PATH}/enterprise

#配置編譯文件的存放地址
#ps: 空空小僧修改的  否則報(bào)上面的錯(cuò)誤  下面企業(yè)的路徑是絕對路徑,其他的是相對路徑
 #******************這里要特別注意 必須寫絕對路徑,寫相對路徑會(huì)報(bào)錯(cuò). 錯(cuò)誤為: normal armv7   normal arm64的錯(cuò)誤
#adHoc
CONFIGURATION_BUILD_PATH_ADHOC=${ADHOC_PATH}/${Configuration}-iphoneos
#appStore
CONFIGURATION_BUILD_PATH_APPSTORE=${APPSTORE_PATH}/${Configuration}-iphoneos
#企業(yè)
#CONFIGURATION_BUILD_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Configuration}-iphoneos
CONFIGURATION_BUILD_PATH_ENTERPRISE=/Users/Apple/Desktop/oneshare-client-ios/build/enterprise/Release-iphoneos


#下面是獲取上傳到第三方統(tǒng)計(jì)崩潰日志的文件分蓖,如果沒有用到可以刪除該部分
#adHoc
DSYM_PATH_ADHOC=${CONFIGURATION_BUILD_PATH_ADHOC}/${Project_Name}.app.dSYM
DSYM_ZIP_PATH_ADHOC=${ADHOC_PATH}/${Project_Name}.app.dSYM.zip
DSYM_COPY_PATH_ADHOC=${ADHOC_PATH}/copy
#appStore
DSYM_PATH_APPSTORE=${CONFIGURATION_BUILD_PATH_APPSTORE}/${Project_Name}.app.dSYM
DSYM_ZIP_PATH_APPSTORE=${APPSTORE_PATH}/${Project_Name}.app.dSYM.zip
DSYM_COPY_PATH_APPSTORE=${APPSTORE_PATH}/copy
#企業(yè)
#appStore
DSYM_PATH_ENTERPRISE=${CONFIGURATION_BUILD_PATH_ENTERPRISE}/${Project_Name}.app.dSYM
DSYM_ZIP_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Project_Name}.app.dSYM.zip
DSYM_COPY_PATH_ENTERPRISE=${ENTERPRISE_PATH}/copy



#配置打包結(jié)果輸出的路徑
#AdHoc版本
AdHocPrijectOutPath=${ADHOC_PATH}/adHocOut
#AppStore版本
AppStorePrijectOutPath=${APPSTORE_PATH}/appStoreOut
#企業(yè)版本
EnterprisePrijectOutPath=${ENTERPRISE_PATH}/enterpriseOut


#如果工程中配置了Automatically manage signing尔艇,那么就不需要證書名和描述文件名,請確保工程中配置的證書名和描述文件是你打包想要用的
#ADHOC證書名#描述文件
ADHOCCODE_SIGN_IDENTITY="iPhone Distribution: xxxxx 可以去mac鑰匙串獲取"
ADHOCPROVISIONING_PROFILE_NAME="xxxxxx.mobileprovision"

#AppStore證書名#描述文件
APPSTORECODE_SIGN_IDENTITY="iPhone Distribution: xxxxx"
APPSTOREROVISIONING_PROFILE_NAME="xxxxx-xxxx-xxxx-xxxx-xxxxxx"

#企業(yè)(enterprise)證書名#描述文件
ENTERPRISECODE_SIGN_IDENTITY="iPhone Distribution: x'x'x'x'x"x
ENTERPRISEROVISIONING_PROFILE_NAME="xxxx.mobileprovision"





#加載各個(gè)版本的plist文件么鹤,為了實(shí)現(xiàn)一個(gè)腳本打包所有版本终娃,這里對不同對版本創(chuàng)建了不同的plist配置文件。等號(hào)后面是文件路徑蒸甜,一般把plist文件放在與腳本同一級(jí)別的文件層中棠耕。我這里測試用所以plist文件都一樣,實(shí)際使用是請分開配置為不同文件
ADHOCExportOptionsPlist="./ExportOptions.plist"
AppStoreExportOptionsPlist="./ExportOptions.plist"
EnterpriseExportOptionsPlist="./ExportOptions.plist"


#在終端中提示 根據(jù)輸入的序號(hào)不同柠新,打包成不同版本的ipa
echo "~~~~~~~~~~~~選擇打包方式(輸入序號(hào))~~~~~~~~~~~~~~~"
echo "  1 adHoc"
echo "  2 AppStore"
echo "  3 Enterprise"

# 讀取用戶在終端中輸入并存到變量里
read parameter
sleep 0.5
method="$parameter"

# 判讀用戶是否有輸入
if [ -n "$method" ]
then
if [ "$method" = "1" ]
then
#這里都執(zhí)行命令中是在xcworkspace工程中執(zhí)行的窍荧,如果工程不是xcworkspace,可以把-workspace的內(nèi)容刪掉恨憎,加入了證書和描述文件蕊退,如果不需要請刪除
#如果用戶選擇的是1郊楣,就執(zhí)行adhoc腳本
#首先清除原來的文件夾
rm -rf ${BUILD_PATH}
#創(chuàng)建文件夾,路徑需要一層一層創(chuàng)建瓤荔,不然會(huì)創(chuàng)建失敗
mkdir ${BUILD_PATH}
mkdir ${ADHOC_PATH}
#編譯文件
mkdir ${CONFIGURATION_BUILD_PATH_ADHOC}
#打包輸出的文件
mkdir ${AdHocPrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_ADHOC}
#編譯
xcodebuild archive -scheme $Project_Name -configuration $Configuration -archivePath ${ADHOC_PATH}/$Project_Name-adhoc.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_ADHOC}
#如果需要單獨(dú)設(shè)置證書和描述文件需要在編譯時(shí)加入下面這句話
#CODE_SIGN_IDENTITY="${ADHOCCODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ADHOCPROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER="${AdHocBundleID}"
#打包
xcodebuild  -exportArchive -archivePath ${ADHOC_PATH}/$Project_Name-adhoc.xcarchive -exportOptionsPlist $ADHOCExportOptionsPlist -exportPath ${AdHocPrijectOutPath}
# 選擇是壓縮還是復(fù)制净蚤,復(fù)制的方法可以用于上傳文件到指定服務(wù)器,比如上傳到git
# zip -r 目標(biāo)路徑  源文件路徑 输硝,開始?jí)嚎sdSYM文件
zip -r ${DSYM_ZIP_PATH_ADHOC} ${DSYM_PATH_ADHOC}
# cp -r 源文件路徑 目標(biāo)路徑 今瀑, 把壓縮包拷貝到指定地方
cp -r ${DSYM_ZIP_PATH_ADHOC} ${DSYM_COPY_PATH_ADHOC}
# 復(fù)制 dSYM 包里的 XXX 文件 上傳到指定的地方
#TARGET_PATH=${DSYM_COPY_PATH}/${TARGET}.app.dSYM/Contents/Resources/DWARF/${TARGET}
#cp ${TARGET_PATH} ${EXPORT_DIR}
elif [ "$method" = "2" ]
then
#如果用戶選擇的是2,就執(zhí)行appstore腳本
#首先清除原來的文件夾
rm -rf ${BUILD_PATH}
#創(chuàng)建文件夾点把,路徑需要一層一層創(chuàng)建橘荠,不然會(huì)創(chuàng)建失敗
mkdir ${BUILD_PATH}
mkdir ${APPSTORE_PATH}
#編譯文件
mkdir ${CONFIGURATION_BUILD_PATH_APPSTORE}
#打包輸出的文件
mkdir ${AppStorePrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_APPSTORE}
xcodebuild archive -scheme $Project_Name -configuration $Configuration -archivePath ${APPSTORE_PATH}/$Project_Name-appstore.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_APPSTORE}
xcodebuild  -exportArchive -archivePath ${APPSTORE_PATH}/$Project_Name-appstore.xcarchive -exportOptionsPlist $AppStoreExportOptionsPlist -exportPath ${AppStorePrijectOutPath}
#創(chuàng)建copy文件夾
mkdir ${DSYM_COPY_PATH_APPSTORE}
# 選擇是壓縮還是復(fù)制,復(fù)制的方法可以用于上傳文件到指定服務(wù)器郎逃,比如上傳到git
# zip -r 目標(biāo)路徑  源文件路徑 砾医,開始?jí)嚎sdSYM文件
zip -r ${DSYM_ZIP_PATH_APPSTORE} ${DSYM_PATH_APPSTORE}
# cp -r 源文件路徑 目標(biāo)路徑 , 把壓縮包拷貝到指定地方
cp -r ${DSYM_ZIP_PATH_APPSTORE} ${DSYM_COPY_PATH_APPSTORE}
#驗(yàn)證ipa是否打包成功
if [ -e $AppStorePrijectOutPath/$Project_Name.ipa ]; then
echo '----ipa包已生成----'
open $AppStorePrijectOutPath
echo '----打包ipa完成----'
echo '**---------------**'
echo '****開始發(fā)布ipa包****'
echo '**---------------**'
#驗(yàn)證后上傳到App Store
# 將-u 后面的XXX替換成自己的AppleID的賬號(hào)衣厘,-p后面的XXX替換成自己的密碼
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  XXX -p XXX -t ios --output-format xml
else
echo '----ipa包導(dǎo)出失敗----'
fi


elif [ "$method" = "3" ]
then
#如果用戶選擇的是3如蚜,就執(zhí)行企業(yè)腳本
#首先清除原來的文件夾
rm -rf ${BUILD_PATH}
#創(chuàng)建文件夾,路徑需要一層一層創(chuàng)建影暴,不然會(huì)創(chuàng)建失敗
mkdir ${BUILD_PATH}
mkdir ${ENTERPRISE_PATH}
#編譯文件
mkdir ${CONFIGURATION_BUILD_PATH_ENTERPRISE}
#打包輸出的文件
mkdir ${EnterprisePrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_ENTERPRISE}
xcodebuild archive   -workspace ${Project_Name}.xcworkspace  -scheme $Project_Name -configuration $Configuration -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive CONFIGURATION_BUILD_DIR=${CONFIGURATION_BUILD_PATH_ENTERPRISE}
echo "archive結(jié)束...."

xcodebuild  -exportArchive -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive -exportOptionsPlist $EnterpriseExportOptionsPlist -exportPath ${EnterprisePrijectOutPath}
echo "exportArchive結(jié)束...."
#創(chuàng)建copy文件夾
mkdir ${DSYM_COPY_PATH_ENTERPRISE}
# 選擇是壓縮還是復(fù)制错邦,復(fù)制的方法可以用于上傳文件到指定服務(wù)器,比如上傳到git
# zip -r 目標(biāo)路徑  源文件路徑 型宙,開始?jí)嚎sdSYM文件
zip -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_PATH_ENTERPRISE}
# cp -r 源文件路徑 目標(biāo)路徑 撬呢, 把壓縮包拷貝到指定地方
cp -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_COPY_PATH_ENTERPRISE}
# 將 dSYM 包里的 demo 文件 上傳到指定地點(diǎn)
TARGET_PATH=${DSYM_COPY_PATH}/${Project_Name}.app.dSYM/Contents/Resources/DWARF/${Project_Name} cp ${TARGET_PATH} ${EXPORT_DIR}
else
#如果是其他輸入,則在終端中提示參數(shù)無效并退出
echo "參數(shù)無效...."
exit 1
fi
fi

再次感謝原作者

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妆兑,一起剝皮案震驚了整個(gè)濱河市魂拦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搁嗓,老刑警劉巖芯勘,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腺逛,居然都是意外死亡荷愕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門棍矛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來安疗,“玉大人,你說我怎么就攤上這事够委〖隼啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵茁帽,是天一觀的道長玉罐。 經(jīng)常有香客問我真竖,道長,這世上最難降的妖魔是什么厌小? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任恢共,我火速辦了婚禮,結(jié)果婚禮上璧亚,老公的妹妹穿的比我還像新娘讨韭。我一直安慰自己,他們只是感情好癣蟋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布透硝。 她就那樣靜靜地躺著,像睡著了一般疯搅。 火紅的嫁衣襯著肌膚如雪濒生。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天幔欧,我揣著相機(jī)與錄音罪治,去河邊找鬼。 笑死礁蔗,一個(gè)胖子當(dāng)著我的面吹牛觉义,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浴井,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晒骇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磺浙?” 一聲冷哼從身側(cè)響起洪囤,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撕氧,沒想到半個(gè)月后瘤缩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呵曹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年款咖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奄喂。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖海洼,靈堂內(nèi)的尸體忽然破棺而出跨新,到底是詐尸還是另有隱情,我是刑警寧澤坏逢,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布域帐,位于F島的核電站赘被,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肖揣。R本人自食惡果不足惜民假,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望龙优。 院中可真熱鬧羊异,春花似錦、人聲如沸彤断。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宰衙。三九已至平道,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間供炼,已是汗流浹背一屋。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袋哼,地道東北人陆淀。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像先嬉,于是被迫代替她去往敵國和親轧苫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355