每次更新SDK都需要重新編譯一遍真機(jī)和模擬器的,然后在將兩個(gè)包合并成一個(gè)包。對(duì)于穩(wěn)定的SDK,這些工作做一遍so easy~ 同蜻。 But如果每個(gè)禮拜都要你這么來(lái)一遍似不似很煩惱。程序員是不允許重復(fù)勞動(dòng)的早处,能點(diǎn)一個(gè)按鈕完成絕不點(diǎn)兩個(gè)按鈕湾蔓。
所以就考慮到自動(dòng)化打包Framework,經(jīng)過(guò)多次更迭最終實(shí)現(xiàn)一鍵自動(dòng)化打包+合并真機(jī)模擬器包陕赃。這里記錄一下更迭的各個(gè)方案卵蛉。看客根據(jù)需求選擇合適的就好么库。
方案一
在XCode中添加腳本,利用XCode實(shí)現(xiàn)自動(dòng)化打包甘有。
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi
1.在Build Phases中點(diǎn)擊1處加號(hào)诉儒,選擇New Run Script Phase。就增加了Run Script一欄亏掀。
2.將腳本復(fù)制到 2處黑框中忱反。
3.編譯選擇任意一個(gè)模擬器,編譯一遍滤愕。第一遍會(huì)顯示Failed温算,沒(méi)有問(wèn)題。在選擇真機(jī)模式间影,即選擇下圖中Generic iOS Device再編譯一遍注竿。此時(shí),已經(jīng)完成了打包合并工作魂贬。
打包完成的Framework巩割,在工程目錄下的Products文件夾中。此時(shí)可以在終端使用命令查看Framework支持的架構(gòu)付燥。
lipo -info FrameworkName.framework/FrameworkName
方案二
使用python腳本實(shí)現(xiàn)自動(dòng)化打包宣谈。
此處使用的是python3.5,如何沒(méi)有配置環(huán)境的需要先配置一下環(huán)境。點(diǎn)此下載下載完成键科,點(diǎn)擊安裝即可闻丑。安裝完成漩怎,在終端中輸入下方代碼可查看python版本。
$ python3
直接上代碼嗦嗡。
import os
# framework 的名字
FrameworkName = 'STKouyuEngine'
# 編譯的路徑
Build_Path = '/Users/Attu/Desktop/SDKDemo/Framework/STKouyuEngine'
# 保存framework路徑
Product_Path = '/Users/Attu/Desktop/SDKDemo/Framework/Products'
INSTALL_DIR = '%s/%s.framework'%(Product_Path,FrameworkName)
DEVICE_DIR='%s/Build/Release-iphoneos/%s.framework'%(Build_Path,FrameworkName)
SIMULATOR_DIR='%s/Build/Release-iphonesimulator/%s.framework'%(Build_Path,FrameworkName)
# 編譯
os.chdir('%s'%Build_Path)
os.system('xcodebuild -configuration "Release" -target %s -sdk iphoneos clean build'%(FrameworkName))
os.system('xcodebuild -configuration "Release" -target %s -sdk iphonesimulator clean build'%(FrameworkName))
# 創(chuàng)建一個(gè)通用文件夾
os.system('mkdir -p %s'%(Product_Path))
os.system('cp -R %s/ %s/'%(DEVICE_DIR,INSTALL_DIR))
# 合并
os.system('lipo -create %s/%s %s/%s -output %s/%s'% (DEVICE_DIR,FrameworkName,SIMULATOR_DIR,FrameworkName,INSTALL_DIR,FrameworkName))
os.system('open %s'% Product_Path)
保存為py文件勋锤,通過(guò)終端cd到該文件目錄并運(yùn)行該文件,運(yùn)行結(jié)束后自動(dòng)打開(kāi)Framework所在文件夾酸钦。
到這里已經(jīng)能夠非常自動(dòng)化的完成打包加合并真機(jī)和模擬器的Framework了怪得。但是鑒于程序員的強(qiáng)迫癥,此方案還是需要在終端上打很多代碼卑硫,有沒(méi)有一鍵就能搞定的方案呢徒恋?所以就催生了方案三。
方案三
方案三是在方案二的基礎(chǔ)上改進(jìn)的欢伏。是將方案二中Python文件轉(zhuǎn)換為可執(zhí)行文件入挣。最終實(shí)現(xiàn)雙擊該可執(zhí)行文件,就完成打包加合并的功能硝拧。
我是通過(guò)https://github.com/ZYunH/Python-script-converter來(lái)完成可執(zhí)行文件的轉(zhuǎn)換径筏。感謝該工具的作者!
上面的為可執(zhí)行文件障陶,下面的為Python文件滋恬。
以上就是我一步一步實(shí)現(xiàn)一鍵打包加合并的歷程,希望能給小伙伴們一點(diǎn)幫助抱究!