做iOS開(kāi)發(fā)時(shí)間久了,打包APP一定是比較頻繁的事情,每次都需要各種點(diǎn)點(diǎn)點(diǎn)。。。要是能簡(jiǎn)單執(zhí)行一個(gè)腳本就生成ipa,那就輕松了!
于是開(kāi)始在谷歌學(xué)習(xí)如何制作自動(dòng)化打包腳本,但是好多都是老版本。所以我打算參考別人的教程,再自己研究研究,最后把研究成果進(jìn)行一個(gè)總結(jié),方便日后查閱。
參考文章:
http://www.lxweimin.com/p/97c97c2ec1ca
http://www.lxweimin.com/p/3f43370437d2
http://blog.csdn.net/potato512/article/details/52172107
http://blog.csdn.net/itiapp_home/article/details/70241011
Begin to do
小牛試刀
其實(shí)當(dāng)Xcode點(diǎn)擊build或者運(yùn)行comand+R之后,Xcode執(zhí)行的命令是xcodebuild這條命令。
打開(kāi)終端,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命令是蘋(píng)果官方推出的打包命令,可以在終端輸入xcodebuild -help
查看,也可以看官方文檔。
背景知識(shí)
在8.3之前推薦使用xcodebuild + xcrun
的PackageApplication
的方式打包,筆者在學(xué)習(xí)過(guò)程中也使用過(guò),但是執(zhí)行命令行時(shí)報(bào)錯(cuò)xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
,提示很明顯在路徑中找不到PackageApplication
文件,雖然網(wǎng)上也有提供下載PackageApplication
方式的解決方法,但筆者在Xocde9下嘗試無(wú)效。
于是筆者使用了官方推薦的arhive+exportArchive
的方式來(lái)打包。本文也主要講解如何通過(guò)arhive+exportArchive
方式打包。
命令行
生成Archive包
首先需要在xcode項(xiàng)目配置好證書(shū)及描述文件,然后打開(kāi)終端cd到項(xiàng)目目錄,執(zhí)行編輯并清理命令。
xcodebuild archive
-workspace 項(xiàng)目名稱(chēng).xcworkspace (非cocoapods項(xiàng)目使用 -project 項(xiàng)目名稱(chēng).xcodeproj)
-scheme 項(xiàng)目名稱(chēng)
-configuration 構(gòu)建版本(Debug or Release)
-archivePath archive包存儲(chǔ)路徑
clean archive 清理
- -workspace or -project
此處有區(qū)別,如果非cocoapods項(xiàng)目使用-project 項(xiàng)目名稱(chēng).xcodeproj
,cocoapods項(xiàng)目使用-workspace 項(xiàng)目名稱(chēng).xcworkspace
; - -scheme 可以通過(guò)
xcodebuild -list
獲取; - -configuration 一些參數(shù),也可以通過(guò)
xcodebuild -list
獲取,一般使用Debug
orRelease
; - -archivePath 生成archivePath的路徑,一般放項(xiàng)目目錄下并且自定義一個(gè)文件夾名稱(chēng),例如
archive/test.xcarchive
; - clean archive 編譯之前清理;
生成ipa文件
上文已經(jīng)提到PackageApplication
已經(jīng)不推薦,本文通過(guò)arhive+exportArchive
來(lái)實(shí)現(xiàn)打包。
xcodebuild -exportArchive -archivePath archive文件的地址.xcarchive
-exportPath 導(dǎo)出ipa文件路徑
-exportOptionsPlist exportOptionsPlist文件路徑
-allowProvisioningUpdates 允許配置更新
- -archivePath 此路徑為
生成Archive包
步驟中生成的archive路徑; - -exportPath 設(shè)置導(dǎo)出ipa文件路徑;
- -exportOptionsPlist
此處需要詳細(xì)說(shuō)明下,筆者在調(diào)研過(guò)程中也卡在此處,此plist并非項(xiàng)目中info.plist
文件路徑,是需要新建一個(gè)plist
文件,格式是如下:
** ExportOptions.plist文件參數(shù)說(shuō)明 **
compileBitcode:不上架App Store,Xcode是否啟用Bitcode重新編譯,默認(rèn)為YES。
method:歸檔類(lèi)型,包括app-store、ad-hoc、package、enterprise、development以及developer-id。
uploadBitcode:上線App Store是否開(kāi)啟Bitcode,默認(rèn)為YES。
uploadSymbols:上線App Store,是否開(kāi)啟符號(hào)序列化,這是與查crash相關(guān)的,默認(rèn)為YES。
特別說(shuō)明下,在Xcode9之前是不需要ExportOptions.plist
,在Xcode9之后必須加入 ExportOptions.plist
;
最后此處指向創(chuàng)建plist文件的路徑即可;
- allowProvisioningUpdates 允許配置更新;
生成Shell腳本介紹
上面所述均是通過(guò)命令行的方式實(shí)現(xiàn)打包,但執(zhí)行起來(lái)還需要輸入命令行,還是不太方便,下面介紹通過(guò)生成一個(gè)Shell腳本來(lái)來(lái)實(shí)現(xiàn)一鍵打包。(詳細(xì)的Sell命令,有興趣的同學(xué)可以在Shell教程中詳細(xì)學(xué)習(xí))
首先打開(kāi)終端輸入如下命令:
touch test
打開(kāi)文件,輸入如下:
#!/bin/sh
echo "Hello Shell"
然后執(zhí)行:
chmod +x test
執(zhí)行成功后查看之前test文本文件,變成了Unix可執(zhí)行文件(即生成了一個(gè)簡(jiǎn)單腳本),雙擊腳本即可查看打印的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腳本
以下是我自動(dòng)打包的主要代碼:
#! /bin/bash
# created by Ficow Shen
#工程絕對(duì)路徑
project_path=$(pwd)/TestProjects
#工程名稱(chēng)
project_name=TestProjects
#打包模式 Debug/Release
development_mode=Debug
#scheme名
scheme_name=TestProjects
#archive文件夾名稱(chēng)
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 '*** 打包完成 ***'
修改如下幾點(diǎn)即可使用此腳本實(shí)現(xiàn)一鍵打包:
- project_path
$(pwd)
為電腦的用戶(hù)目錄,此處填寫(xiě)項(xiàng)目根目錄即可; - project_name 此處修改為項(xiàng)目名稱(chēng);
- scheme_name 此處同樣可以修改為項(xiàng)目名稱(chēng);
- exportOptionsPlist 此處需要填寫(xiě)上文提到的
exportOptionsPlist.plist
文件所在目錄; - exportFilePath 導(dǎo)出ipa文件路徑,默認(rèn)設(shè)置桌面;