XCode9制作一鍵打包腳本

做iOS開發(fā)時間久了卸夕,打包APP一定是比較頻繁的事情馏鹤,每次都需要各種點點點。娇哆。湃累。要是能簡單執(zhí)行一個腳本就生成ipa,那就輕松了碍讨!
于是開始在谷歌學(xué)習(xí)如何制作自動化打包腳本治力,但是好多都是老版本。所以我打算參考別人的教程勃黍,再自己研究研究宵统,最后把研究成果進(jìn)行一個總結(jié),方便日后查閱。
參考文章:
http://www.reibang.com/p/97c97c2ec1ca
http://www.reibang.com/p/3f43370437d2
http://blog.csdn.net/potato512/article/details/52172107
http://blog.csdn.net/itiapp_home/article/details/70241011


Begin to do

小牛試刀

其實當(dāng)Xcode點擊build或者運(yùn)行comand+R之后马澈,Xcode執(zhí)行的命令是xcodebuild這條命令瓢省。
打開終端,cd到你的工程位置痊班,然后試一下xcodebuild勤婚、xcrun命令,看看自己電腦是否安裝了xcodebuild及xcrun涤伐。

# xcodebuild
kuangzihandeMacBook-Pro:YuanKezi kuangzihan$ xcodebuild -version  
Xcode 9.1
Build version 9B55

# xcrun
kuangzihandeMacBook-Pro:YuanKezi kuangzihan$ xcrun --version
xcrun version 35.

xcodebuild命令是蘋果官方推出的打包命令馒胆,可以在終端輸入xcodebuild -help查看,也可以看官方文檔凝果。

背景知識

在8.3之前推薦使用xcodebuild + xcrunPackageApplication的方式打包祝迂,筆者在學(xué)習(xí)過程中也使用過,但是執(zhí)行命令行時報錯xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH器净,提示很明顯在路徑中找不到PackageApplication文件型雳,雖然網(wǎng)上也有提供下載PackageApplication方式的解決方法,但筆者在Xocde9下嘗試無效山害。
于是筆者使用了官方推薦的arhive+exportArchive的方式來打包四啰。本文也主要講解如何通過arhive+exportArchive方式打包。

命令行

生成Archive包

首先需要在xcode項目配置好證書及描述文件粗恢,然后打開終端cd到項目目錄,執(zhí)行編輯并清理命令欧瘪。

xcodebuild archive 
           -workspace 項目名稱.xcworkspace (非cocoapods項目使用 -project 項目名稱.xcodeproj)
           -scheme 項目名稱 
           -configuration 構(gòu)建版本(Debug or Release) 
           -archivePath archive包存儲路徑  
           clean archive  清理
  • -workspace or -project
    此處有區(qū)別眷射,如果非cocoapods項目使用-project 項目名稱.xcodeproj,cocoapods項目使用-workspace 項目名稱.xcworkspace佛掖;
  • -scheme 可以通過xcodebuild -list獲妊铩;
  • -configuration 一些參數(shù)芥被,也可以通過xcodebuild -list獲取欧宜,一般使用DebugorRelease
  • -archivePath 生成archivePath的路徑拴魄,一般放項目目錄下并且自定義一個文件夾名稱冗茸,例如archive/test.xcarchive
  • clean archive 編譯之前清理匹中;
生成ipa文件

上文已經(jīng)提到PackageApplication已經(jīng)不推薦夏漱,本文通過arhive+exportArchive來實現(xiàn)打包。

xcodebuild -exportArchive -archivePath archive文件的地址.xcarchive
                          -exportPath 導(dǎo)出ipa文件路徑 
                          -exportOptionsPlist exportOptionsPlist文件路徑  
                          -allowProvisioningUpdates 允許配置更新
  • -archivePath 此路徑為生成Archive包步驟中生成的archive路徑顶捷;
  • -exportPath 設(shè)置導(dǎo)出ipa文件路徑挂绰;
  • -exportOptionsPlist
    此處需要詳細(xì)說明下,筆者在調(diào)研過程中也卡在此處服赎,此plist并非項目中info.plist文件路徑葵蒂,是需要新建一個plist文件交播,格式是如下:
ExportOptions.png
** ExportOptions.plist文件參數(shù)說明 ** 
compileBitcode:不上架App Store,Xcode是否啟用Bitcode重新編譯践付,默認(rèn)為YES秦士。 
method:歸檔類型,包括app-store荔仁、ad-hoc伍宦、package、enterprise乏梁、development以及developer-id次洼。 
uploadBitcode:上線App Store是否開啟Bitcode,默認(rèn)為YES遇骑。 
uploadSymbols:上線App Store卖毁,是否開啟符號序列化,這是與查crash相關(guān)的落萎,默認(rèn)為YES亥啦。

特別說明下,在Xcode9之前是不需要ExportOptions.plist 练链,在Xcode9之后必須加入 ExportOptions.plist翔脱;
最后此處指向創(chuàng)建plist文件的路徑即可;

  • allowProvisioningUpdates 允許配置更新媒鼓;

生成Shell腳本介紹

上面所述均是通過命令行的方式實現(xiàn)打包届吁,但執(zhí)行起來還需要輸入命令行,還是不太方便绿鸣,下面介紹通過生成一個Shell腳本來來實現(xiàn)一鍵打包疚沐。(詳細(xì)的Sell命令溪椎,有興趣的同學(xué)可以在Shell教程中詳細(xì)學(xué)習(xí))
首先打開終端輸入如下命令:

touch test
在user目錄可看到生成的test文本文件

打開文件璧南,輸入如下:

#!/bin/sh  
echo "Hello Shell"

然后執(zhí)行:

chmod +x test

執(zhí)行成功后查看之前test文本文件,變成了Unix可執(zhí)行文件(即生成了一個簡單腳本)浴讯,雙擊腳本即可查看打印的Hello Shell擎厢,如下:

kuangzihandeMacBook-Pro:~ kuangzihan$ /Users/kuangzihan/test ; exit;
Hello Shell
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[進(jìn)程已完成]

一鍵打包Shell腳本

以下是我自動打包的主要代碼:

#! /bin/bash
# created by Ficow Shen

#工程絕對路徑
project_path=$(pwd)/TestProjects

#工程名稱
project_name=TestProjects

#打包模式 Debug/Release
development_mode=Debug

#scheme名
scheme_name=TestProjects

#archive文件夾名稱
archive_path=archive

#plist文件所在路徑
exportOptionsPlistPath=$(pwd)/iOS/IPA.plist

#導(dǎo)出.ipa文件所在路徑
exportFilePath=$(pwd)/Desktop/${scheme_name}_IPA



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

echo '*** 正在 打包 ***'
xcodebuild \
-exportArchive \
-archivePath ${project_path}/${archive_path}/${project_name}.xcarchive \
-exportPath ${exportFilePath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-allowProvisioningUpdates \
-quiet || exit

if [ -e $exportFilePath/$scheme_name.ipa ]; then
    echo "*** .ipa文件已導(dǎo)出 ***"
    open $exportFilePath
else
    echo "*** 創(chuàng)建.ipa文件失敗 ***"
fi
echo '*** 打包完成 ***'

修改如下幾點即可使用此腳本實現(xiàn)一鍵打包:

  1. project_path $(pwd)為電腦的用戶目錄究流,此處填寫項目根目錄即可;
  2. project_name 此處修改為項目名稱动遭;
  3. scheme_name 此處同樣可以修改為項目名稱梯嗽;
  4. exportOptionsPlist 此處需要填寫上文提到的exportOptionsPlist.plist文件所在目錄;
  5. exportFilePath 導(dǎo)出ipa文件路徑,默認(rèn)設(shè)置桌面沽损;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灯节,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炎疆,老刑警劉巖卡骂,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異形入,居然都是意外死亡全跨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門亿遂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浓若,“玉大人,你說我怎么就攤上這事蛇数∨驳觯” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵耳舅,是天一觀的道長碌上。 經(jīng)常有香客問我,道長浦徊,這世上最難降的妖魔是什么馏予? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮盔性,結(jié)果婚禮上霞丧,老公的妹妹穿的比我還像新娘。我一直安慰自己冕香,他們只是感情好蛹尝,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暂筝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硬贯。 梳的紋絲不亂的頭發(fā)上焕襟,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音饭豹,去河邊找鬼鸵赖。 笑死,一個胖子當(dāng)著我的面吹牛拄衰,可吹牛的內(nèi)容都是我干的它褪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼翘悉,長吁一口氣:“原來是場噩夢啊……” “哼茫打!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤老赤,失蹤者是張志新(化名)和其女友劉穎轮洋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抬旺,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡弊予,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了开财。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汉柒。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖责鳍,靈堂內(nèi)的尸體忽然破棺而出碾褂,到底是詐尸還是另有隱情,我是刑警寧澤薇搁,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布斋扰,位于F島的核電站,受9級特大地震影響啃洋,放射性物質(zhì)發(fā)生泄漏传货。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一宏娄、第九天 我趴在偏房一處隱蔽的房頂上張望问裕。 院中可真熱鬧,春花似錦孵坚、人聲如沸粮宛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巍杈。三九已至,卻和暖如春扛伍,著一層夾襖步出監(jiān)牢的瞬間筷畦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工刺洒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留鳖宾,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓逆航,卻偏偏與公主長得像鼎文,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子因俐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 本文始發(fā)于我的博文詳解Shell腳本實現(xiàn)iOS自動化編譯打包提交拇惋,現(xiàn)轉(zhuǎn)發(fā)至此周偎。 目錄 前言 Shell腳本涉及的工...
    zackzheng閱讀 44,501評論 95 173
  • 本文轉(zhuǎn)自CaryaLiu's Blog。 本文最終實現(xiàn)的是使用腳本打 Ad-hoc 包蚤假,并發(fā)布測試栏饮,當(dāng)然稍微修改一...
    M_Baron閱讀 1,011評論 1 0
  • 前言 眾所周知,現(xiàn)在App的競爭已經(jīng)到了用戶體驗為王磷仰,質(zhì)量為上的白熱化階段袍嬉。用戶們都是很挑剔的。如果一個公司的推廣...
    閑云清煙閱讀 2,518評論 1 4
  • 前言 眾所周知灶平,現(xiàn)在App的競爭已經(jīng)到了用戶體驗為王伺通,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的逢享。如果一個公司的推廣...
    偏偏就是禰閱讀 8,992評論 34 59
  • 大學(xué)生活已經(jīng)過去一個月了罐监,可是現(xiàn)在我感到從未有過的迷茫。"理想很豐滿瞒爬,現(xiàn)實很骨感 弓柱。"大概就是說著我現(xiàn)在的...
    非兒_dd75閱讀 557評論 1 2