做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 + xcrun
的PackageApplication
的方式打包祝迂,筆者在學(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
獲取欧宜,一般使用Debug
orRelease
; - -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.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
打開文件璧南,輸入如下:
#!/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)一鍵打包:
- project_path
$(pwd)
為電腦的用戶目錄究流,此處填寫項目根目錄即可; - project_name 此處修改為項目名稱动遭;
- scheme_name 此處同樣可以修改為項目名稱梯嗽;
- exportOptionsPlist 此處需要填寫上文提到的
exportOptionsPlist.plist
文件所在目錄; - exportFilePath 導(dǎo)出ipa文件路徑,默認(rèn)設(shè)置桌面沽损;