xcode打包命令

#!/bin/sh

# 使用方法:
# step1: 將該腳本放在工程的根目錄下(跟.xcworkspace文件or .xcodeproj文件同目錄)
# step2: 根據(jù)情況修改下面的參數(shù)
# step3: 打開(kāi)終端征椒,執(zhí)行腳本。(輸入sh 勃救,然后將腳本文件拉到終端,會(huì)生成文件路徑勃黍,然后enter就可)

# =============項(xiàng)目自定義部分(自定義好下列參數(shù)后再執(zhí)行該腳本)=================== #

# 是否編譯工作空間 (例:若是用Cocopods管理的.xcworkspace項(xiàng)目,賦值true;用Xcode默認(rèn)創(chuàng)建的.xcodeproj,賦值false)
is_workspace="true"

# .xcworkspace的名字晕讲,如果is_workspace為true,則必須填瓢省。否則可不填
workspace_name="CarRecord"

# .xcodeproj的名字,如果is_workspace為false摹量,則必須填馒胆。否則可不填
project_name="CarRecord"

# 指定項(xiàng)目的scheme名稱(也就是工程的target名稱),必填
scheme_name="CarRecord"

# 指定要打包編譯的方式 : Release,Debug祝迂。一般用Release。必填
build_configuration="Release"

# method骂删,打包的方式四啰。方式分別為 development, ad-hoc, app-store, enterprise 。必填
method="ad-hoc"


#  下面兩個(gè)參數(shù)只是在手動(dòng)指定Pofile文件的時(shí)候用到柑晒,如果使用Xcode自動(dòng)管理Profile,直接留空就好
# (跟method對(duì)應(yīng)的)mobileprovision文件名,需要先雙擊安裝.mobileprovision文件.手動(dòng)管理Profile時(shí)必填
mobileprovision_name="VD_ADC_xiaoyu_Final"

# 項(xiàng)目的bundleID佛掖,手動(dòng)管理Profile時(shí)必填
#com.yibao.YBMiniSteward
bundle_identifier="com.vdiscovery.carrecord"

#以下兩個(gè)參數(shù)為蒲公英平臺(tái)分配可以在賬戶這只里查看
#API Key
apiKey="xxxxxxx"
#User Key
uKey="xxxxxxxx"


echo "--------------------腳本配置參數(shù)檢查--------------------"
echo "\033[33;1mis_workspace=${is_workspace} "
echo "workspace_name=${workspace_name}"
echo "project_name=${project_name}"
echo "scheme_name=${scheme_name}"
echo "build_configuration=${build_configuration}"
echo "bundle_identifier=${bundle_identifier}"
echo "method=${method}"
echo "mobileprovision_name=${mobileprovision_name} \033[0m"


# =======================腳本的一些固定參數(shù)定義(無(wú)特殊情況不用修改)====================== #

# 獲取當(dāng)前腳本所在目錄
script_dir="$( cd "$( dirname "$0"  )" && pwd  )"
# 工程根目錄
project_dir=$script_dir

# 時(shí)間
DATE=`date '+%Y%m%d_%H%M%S'`
# 指定輸出導(dǎo)出文件夾路徑
export_path="/Users/dt/desktop/$scheme_name-$DATE.ipa"
# 指定輸出歸檔文件路徑
export_archive_path="$export_path/$scheme_name.xcarchive"
# 指定輸出ipa文件夾路徑
export_ipa_path="$export_path"
# 指定輸出ipa名稱
ipa_name="${scheme_name}_${DATE}"
# 指定導(dǎo)出ipa包需要用到的plist配置文件的路徑
export_options_plist_path="$project_dir/ExportOptions.plist"




echo "--------------------腳本固定參數(shù)檢查--------------------"
echo "\033[33;1mproject_dir=${project_dir}"
echo "DATE=${DATE}"
echo "export_path=${export_path}"
echo "export_archive_path=${export_archive_path}"
echo "export_ipa_path=${export_ipa_path}"
echo "export_options_plist_path=${export_options_plist_path}"
echo "ipa_name=${ipa_name} \033[0m"

# =======================自動(dòng)打包部分(無(wú)特殊情況不用修改)====================== #

echo "------------------------------------------------------"
echo "\033[32m開(kāi)始構(gòu)建項(xiàng)目  \033[0m"
# 進(jìn)入項(xiàng)目工程目錄
cd ${project_dir}

# 指定輸出文件目錄不存在則創(chuàng)建
if [ -d "$export_path" ] ; then
    echo $export_path
else
    mkdir -pv $export_path
fi

# 判斷編譯的項(xiàng)目類型是workspace還是project
if $is_workspace ; then
# 編譯前清理工程
xcodebuild clean -workspace ${workspace_name}.xcworkspace \
                 -scheme ${scheme_name} \
                 -configuration ${build_configuration}

xcodebuild archive -workspace ${workspace_name}.xcworkspace \
                   -scheme ${scheme_name} \
                   -configuration ${build_configuration} \
                   -archivePath ${export_archive_path}
else
# 編譯前清理工程
xcodebuild clean -project ${project_name}.xcodeproj \
                 -scheme ${scheme_name} \
                 -configuration ${build_configuration}

xcodebuild archive -project ${project_name}.xcodeproj \
                   -scheme ${scheme_name} \
                   -configuration ${build_configuration} \
                   -archivePath ${export_archive_path}
fi

#  檢查是否構(gòu)建成功
#  xcarchive 實(shí)際是一個(gè)文件夾不是一個(gè)文件所以使用 -d 判斷
if [ -d "$export_archive_path" ] ; then
    echo "\033[32;1m項(xiàng)目構(gòu)建成功 ?? ?? ??  \033[0m"

else
    echo "\033[31;1m項(xiàng)目構(gòu)建失敗 ?? ?? ??  \033[0m"
    exit 1
fi
echo "------------------------------------------------------"

echo "\033[32m開(kāi)始導(dǎo)出ipa文件 \033[0m"


# 先刪除export_options_plist文件
if [ -f "$export_options_plist_path" ] ; then
    #echo "${export_options_plist_path}文件存在芥被,進(jìn)行刪除"
    rm -f $export_options_plist_path
fi
# 根據(jù)參數(shù)生成export_options_plist文件
/usr/libexec/PlistBuddy -c  "Add :method String ${method}"  $export_options_plist_path
/usr/libexec/PlistBuddy -c  "Add :provisioningProfiles:"  $export_options_plist_path
/usr/libexec/PlistBuddy -c  "Add :provisioningProfiles:${bundle_identifier} String ${mobileprovision_name}"  $export_options_plist_path


xcodebuild  -exportArchive \
            -archivePath ${export_archive_path} \
            -exportPath ${export_ipa_path} \
            -exportOptionsPlist ${export_options_plist_path} \
            -allowProvisioningUpdates

# 檢查ipa文件是否存在
if [ -f "$export_ipa_path/$scheme_name.ipa" ] ; then
    echo "\033[32;1mexportArchive ipa包成功,準(zhǔn)備進(jìn)行重命名\033[0m"
else
    echo "\033[31;1mexportArchive ipa包失敗 ?? ?? ??     \033[0m"
    exit 1
fi

# 修改ipa文件名稱
mv $export_ipa_path/$scheme_name.ipa $export_ipa_path/$ipa_name.ipa

# 檢查文件是否存在
if [ -f "$export_ipa_path/$ipa_name.ipa" ] ; then
    echo "\033[32;1m導(dǎo)出 ${ipa_name}.ipa 包成功 ??  ??  ??   \033[0m"
    open $export_path
else
    echo "\033[31;1m導(dǎo)出 ${ipa_name}.ipa 包失敗 ?? ?? ??     \033[0m"
    exit 1
fi

# 刪除export_options_plist文件(中間文件)
if [ -f "$export_options_plist_path" ] ; then
    #echo "${export_options_plist_path}文件存在拴魄,準(zhǔn)備刪除"
    rm -f $export_options_plist_path
fi

#上傳到蒲公英

echo "\033[32;1m開(kāi)始上傳 ${ipa_name}.ipa 包到蒲公英O啤!:阑濉!  \033[0m"

if [ -f "$export_ipa_path/$ipa_name.ipa" ] ; then
#蒲公英提供的上傳IPA文件接口
    curl -F "file=@$export_ipa_path/$ipa_name.ipa" -F "uKey=$uKey" -F "_api_key=$apiKey" https://www.pgyer.com/apiv1/app/upload
    echo "\033[32;1m上傳 ${ipa_name}.ipa 包到蒲公英成功 ??  ??  ??   \033[0m"
else
    echo "\033[31;1m上傳 ${ipa_name}.ipa 包蒲公英失敗 ?? ?? ??     \033[0m"
    exit 1
fi

# 輸出打包總用時(shí)
echo "\033[36;1m使用distribution打包總用時(shí): ${SECONDS}s \033[0m"

exit 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芳室,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堪侯,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芽死,死亡現(xiàn)場(chǎng)離奇詭異次洼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)卖毁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門落萎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炭剪,“玉大人,你說(shuō)我怎么就攤上這事媒鼓。” “怎么了绿鸣?”我有些...
    開(kāi)封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵暂氯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我痴施,道長(zhǎng),這世上最難降的妖魔是什么锉矢? 我笑而不...
    開(kāi)封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任齿尽,我火速辦了婚禮,結(jié)果婚禮上循头,老公的妹妹穿的比我還像新娘。我一直安慰自己国裳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布缝左。 她就那樣靜靜地躺著浓若,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挪钓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天倚评,我揣著相機(jī)與錄音,去河邊找鬼天梧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚯妇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼硬贯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了饭豹?” 一聲冷哼從身側(cè)響起务漩,我...
    開(kāi)封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饵骨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妖混,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轮洋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祥楣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荣堰,死狀恐怖竭翠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斋扰,我是刑警寧澤啃洋,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布屎鳍,位于F島的核電站,受9級(jí)特大地震影響逮壁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卖宠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一忧饭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧词裤,春花似錦、人聲如沸吼砂。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至女揭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栏饮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工境蔼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人箍土。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓罐监,卻偏偏與公主長(zhǎng)得像吴藻,于是被迫代替她去往敵國(guó)和親弓柱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侧但,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355