iOS shell腳本實現(xiàn)xcodebuild編譯打包+curl上傳蒲公英抡爹、App Store+上傳dSYM到Bugly

因Xcode手動編譯打包太繁瑣,最近簡單實現(xiàn)了一個自動編譯打包的shell腳本這里分享給大家芒划。

實現(xiàn)功能:

  • 自動編譯出xcarchive文件冬竟。
  • 自動打包導出ipa文件。
  • 自動將ipa上傳App Store民逼、蒲公英泵殴。
  • 自動壓縮、上傳dYSM什么是dYSM缴挖?)文件到Bugly袋狞。
  • 三種設置versionbuild版本號模式:
    1、不做修改映屋,保留當前版本苟鸯。
    2、build號自動+1棚点。
    3早处、隨心設置versionbuild號。

準備工作:

  • 下載shell腳本
    首先請在這里下載文件shell文件瘫析,然后將文件夾里的b.sh砌梆、ADHOCExportOptionsPlist.plistAppStoreExportOptionsPlist.plist放到你的工程根目錄下(和你.xcodeproj文件同級)默责。
  • 重新配置屬于你項目的ExportOptionsPlist文件
    最簡單的配置方式是用你自己項目的ExportOptionsPlist文件替換剛剛放到你項目根目錄中的ADHOCExportOptionsPlist.plistAppStoreExportOptionsPlist.plist文件。至于生成ExportOptionsPlist文件咸包,你可以配置好項目證書后桃序,使用Xcode分別用Debug和Release模式Archive,然后導出ipa包烂瘫,在ipa包同級文件夾中就可以找到相應模式的ExportOptionsPlist文件媒熊。
  • 配置屬于你的腳本
    替換b.sh腳本中的變量值,詳情請看shell腳本坟比。

執(zhí)行腳本:

  • 打開終端cd到你的項目根目錄芦鳍。
  • 使用./b.sh指令執(zhí)行腳本。
  • 選擇編譯環(huán)境Place enter the number you want to export ? [ 1:app-store 2:ad-hoc]
  • 設置version和build版本號Do you want to set a new version for xxxxx ? [ 1:NO 2:Build version + 1 3:YES ]葛账。

設置完編譯環(huán)境和版本號后靜待編譯打包和上傳柠衅,腳本默認將xxxxxx.xcarchivexxxxxx.ipa導出到~/Desktop桌面BuildIPAs文件夾中。

腳本簡介:

  • 獲取當前shell腳本所在文件夾路徑籍琳,即工程的絕對路徑菲宴,后面的一切基于這個路徑開始,便于獲取到工程文件巩割。
#$0:當前Shell程序的文件名
#dirname $0裙顽,獲取當前Shell程序的路徑
#cd `dirname $0`,進入當前Shell程序的目錄
#工程絕對路徑
project_path=$(cd `dirname $0`; pwd)
  • 你需要替換的基本變量
# 工程名
project_name="替換成你的工程名字"
# scheme名
scheme_name="替換成你的scheme名字"
  • 獲取日期和時間宣谈,用于設置存放xxxxxx.xcarchivexxxxxx.ipa文件夾的后綴愈犹,便于之后查找相應的文件。
#包名后綴(日期+時間)
date="$(date "+%Y-%m-%d_%H-%M-%S")"
temp_date="_${date}"
  • 獲取你所選擇編譯環(huán)境闻丑,read用來獲取終端輸入的值漩怎,這里用來獲取你所選擇1、2三種模式嗦嗡。
echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc] "
#讀取用戶輸入的信息
read number
while([[ $number != 1 ]] && [[ $number != 2 ]])
do
echo "Error! Should enter 1 or 2"
echo "Place enter the number you want to export ? [ 1:app-store 2:ad-hoc] "
read number
done
  • 根據(jù)前面選擇的編譯環(huán)境勋锤,選擇ExportOptionsPlist文件。
if [ $number == 1 ];then
development_mode=Release
exportOptionsPlistPath=${project_path}/AppStoreExportOptionsPlist.plist

else
development_mode=Debug
exportOptionsPlistPath=${project_path}/ADHOCExportOptionsPlist.plist
fi
  • 通過Info.plist獲取項目的versionbuild版本號侥祭,即設置versionbuild版本號的三種模式模式叁执。
#設置項目版本號
mainVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${project_path}/${project_name}/Info.plist)
mainBuild=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" ${project_path}/${project_name}/Info.plist)

new_mainVersion=$mainVersion
new_mainBuild=$mainBuild

echo "${project_name} version:$mainVersion build:$mainBuild"

echo "Do you want to set a new version for ${project_name} ? [ 1:NO 2:Build version + 1 3:YES ] "

#
read v_number
while([[ $v_number != 1 ]] && [[ $v_number != 2 ]] && [[ $v_number != 3 ]])
do
echo "Error! Should enter 1 、2矮冬、3"
echo "Do you want to set a new version for ${project_name} ? [ 1:YES 2:NO 3:Build version + 1 ] "
read v_number
done
#
if [ $v_number == 1 ];then
    echo "/+++++++ 未更改版本號 +++++++/"
elif [[ $v_number == 2 ]]; then
    #build + 1
    new_mainBuild=$((${mainBuild} + 1))
else
    echo "Please enter a new version:?"
    read version
    new_mainVersion=$version

    echo "Please enter a new build:?"
    read build
    new_mainBuild=$build

fi

# 設置新的Version 和 Build
plutil -replace CFBundleShortVersionString -string $new_mainVersion ${project_path}/${project_name}/Info.plist
plutil -replace CFBundleVersion -string $new_mainBuild ${project_path}/${project_name}/Info.plist
  • 使用xcodebuild編譯打包項目
echo '/+++++++ 正在清理工程 +++++++/'
xcodebuild \
clean -configuration ${development_mode} -quiet  || exit
echo '/+++++++ 清理完成 +++++++/'

echo '正在編譯工程:'${development_mode}
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive  -quiet  || exit
echo '/+++++++ 編譯完成 +++++++/'

echo '/+++++++ 開始ipa打包 +++++++/'
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit
# 判斷IPAs內(nèi)是否有ipa包
if [ -e $exportIpaPath/$scheme_name.ipa ]; then
echo '/+++++++ ipa包已導出 +++++++/'
open $exportIpaPath
else
echo '/+++++++ ipa包導出失敗 +++++++/'
fi
  • 根據(jù)前面選擇的編譯環(huán)境將ipa包上傳到App Store或蒲公英(關(guān)于curl上傳蒲公英)谈宛,這里要替換相應的apple id 和蒲公英user key、api key等參數(shù)胎署。上傳成功過后mv $exportIpaPath $exportIpaPath$append_path這里使用mv指令修改文件夾名稱用于區(qū)分上傳平臺吆录。最終存放ipa包的文件夾的名稱由工程名稱時間琼牧、版本號平臺名稱組成恢筝。
if [ $number == 1 ];then
    
#上傳App Store
echo '/+++++++ 上傳App Store +++++++/'
#驗證并上傳到App Store
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 這里是你的appleid -p 這里是你的密碼 -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  這里是你的appleid -p 這里是你的密碼 -t ios --output-format xml

append_path="已上傳到App Store"
# 修改存放ipa包文件夾路徑哀卫,添加后綴,以便區(qū)分上傳平臺
mv $exportIpaPath $exportIpaPath$append_path
echo '/+++++++ 成功上傳到App Store +++++++/'
else

#上傳蒲公英
echo '/+++++++ 上傳蒲公英 +++++++/'
PASSWORD=123456
#將git最后一次提交作為更新說明
MSG=`git log -1 --pretty=%B`
curl -F "file=@$exportIpaPath/$scheme_name.ipa" \
-F "uKey=蒲公英的user key" \
-F "_api_key=蒲公英的api key" \
-F "updateDescription=${MSG}" \
-F "password=${PASSWORD}" \
https://qiniu-storage.pgyer.com/apiv1/app/upload

append_path="已上傳到蒲公英"
mv $exportIpaPath $exportIpaPath$append_path
echo '/+++++++ 成功上傳到蒲公英 +++++++/'
fi
#Bugly 
buglyAppKey="替換成你的bugly app key"
buglyAppId="替換成你的bugly app id"
bundleId="替換成你的bundle id"

echo '/+++++++ 壓縮dSYM文件 +++++++/'
cd $build_path/$project_name.xcarchive/dSYMs
zip -r -o project_name.app.dSYM.zip "${project_name}.app.dSYM"
echo '/+++++++ 壓縮dSYM文件完成 +++++++/'

echo '/+++++++ 上傳dSYM文件 +++++++/'
curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=$buglyAppKey&app_id=$buglyAppId" --form "api_version=1" --form "app_id=$buglyAppId" --form "app_key=$buglyAppKey" --form "symbolType=2"  --form "bundleId=${bundleId}" --form "productVersion=${new_mainVersion}(${new_mainBuild})" --form "channel=appstore" --form "fileName=$project_name.app.dSYM.zip" --form "file=@$build_path/$project_name.xcarchive/dSYMs/$project_name.app.dSYM.zip" --verbose
echo '\n/+++++++ 上傳dSYM文件結(jié)束 +++++++/'

echo '/+++++++ 壓縮symbol文件 +++++++/'
cd $build_path/$project_name.xcarchive
zip -r -o 'symbol.zip' "BCSymbolMaps"
echo '\n/+++++++ 壓縮symbol文件結(jié)束 +++++++/'

echo '/+++++++ 上傳Symbol文件 +++++++/'
curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=$buglyAppKey&app_id=$buglyAppId" --form "api_version=1" --form "app_id=$buglyAppId" --form "app_key=$buglyAppKey" --form "symbolType=2"  --form "bundleId=${bundleId}" --form "productVersion=${new_mainVersion}(${new_mainBuild})" --form "fileName=symbol.zip" --form "file=@$build_path/$project_name.xcarchive/symbol.zip" --verbose
echo '/+++++++ 上傳Symbol文件結(jié)束 +++++++/'

以上便是整個iOS自動編譯打包的shell腳本內(nèi)容此改,可以根據(jù)你的需要自行裁剪修改腳本內(nèi)容,但是這一切的基礎是配置好你項目的編譯環(huán)境CertificatesProvisioning Profiles侄柔,從而獲取正確的ExportOptionsPlist文件带斑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市勋拟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妈候,老刑警劉巖敢靡,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苦银,居然都是意外死亡啸胧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門幔虏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纺念,“玉大人,你說我怎么就攤上這事想括∠萜祝” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵瑟蜈,是天一觀的道長烟逊。 經(jīng)常有香客問我,道長铺根,這世上最難降的妖魔是什么宪躯? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮位迂,結(jié)果婚禮上访雪,老公的妹妹穿的比我還像新娘。我一直安慰自己掂林,他們只是感情好臣缀,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著党饮,像睡著了一般肝陪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刑顺,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天氯窍,我揣著相機與錄音饲常,去河邊找鬼。 笑死狼讨,一個胖子當著我的面吹牛贝淤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播政供,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼播聪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了布隔?” 一聲冷哼從身側(cè)響起离陶,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衅檀,沒想到半個月后招刨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哀军,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年沉眶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杉适。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡谎倔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猿推,到底是詐尸還是另有隱情片习,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布彤守,位于F島的核電站毯侦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏具垫。R本人自食惡果不足惜侈离,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筝蚕。 院中可真熱鬧卦碾,春花似錦、人聲如沸起宽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坯沪。三九已至绿映,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叉弦。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工丐一, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淹冰。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓库车,卻偏偏與公主長得像,于是被迫代替她去往敵國和親樱拴。 傳聞我的和親對象是個殘疾皇子柠衍,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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