場景
framework開發(fā)中碑宴,需要導(dǎo)出framework給其他人使用梗肝。
他人可能使用模擬器颁糟,也可能使用真機。
所以需要你提供的framewor同時支持模擬器和真機喉悴。
思路
啟動shell腳本:
- build release版本 模擬器適用的framework
- build release版本 真機適用的framework
- 合并1,2步驟中生成的framework并導(dǎo)出
使用xcodebuild+shell
前提:
保證framework在模擬器上build和generic iOS device上build沒有錯誤棱貌,
且生成的framewor可以在相應(yīng)的環(huán)境中適用。
1.啟動shell腳本
方式一
image.png
image.png
方式二
image.png
2.shell腳本編寫
FRAMEWORK_NAME='framework的名字'
WORK_DIR='build'
#release環(huán)境下箕肃,generic ios device編譯出的framework婚脱。這個framework只能供真機運行。
DEVICE_DIR=${WORK_DIR}/'Release-iphoneos'/${FRAMEWORK_NAME}'.framework'
#release環(huán)境下勺像,simulator編譯出的framework障贸。這個framework只能供模擬器運行。
SIMULATOR_DIR=${WORK_DIR}/'Release-iphonesimulator'/${FRAMEWORK_NAME}'.framework'
#framework的輸出目錄
OUTPUT_DIR=${SRCROOT}/'Products'/${FRAMEWORK_NAME}'.framework'
##xcodebuild打包
xcodebuild -target ${FRAMEWORK_NAME}
ONLY_ACTIVE_ARCH=NO
-configuration 'Release'
-sdk iphoneos clean build
xcodebuild -target ${FRAMEWORK_NAME}
ONLY_ACTIVE_ARCH=NO
-configuration 'Release'
-sdk iphonesimulator clean build
#如果輸出目錄存在吟宦,即移除該目錄篮洁,再創(chuàng)建該目錄。目的是為了清空輸出目錄殃姓。
if [ -d ${OUTPUT_DIR} ]; then
rm -rf ${OUTPUT_DIR}
fi
mkdir -p ${OUTPUT_DIR}
#復(fù)制release-simulator下的framework到輸出目錄
cp -r ${DEVICE_DIR}/ ${OUTPUT_DIR}/
#lipo命令合并兩種framework袁波,將SVProgressHUD.framework/SVProgressHUD,覆蓋輸出到輸出目錄蜗侈。
lipo -create ${DEVICE_DIR}/${FRAMEWORK_NAME} ${SIMULATOR_DIR}/${FRAMEWORK_NAME} -output ${OUTPUT_DIR}/${FRAMEWORK_NAME}
rm -r ${WORK_DIR}
#打開輸出目錄
open ${OUTPUT_DIR}
shell代碼分析:
1.build路徑:xcodebuild打包命令生成的文件篷牌,位于對應(yīng) .xcodeproj 的同級build目錄下。
image.png
2.xcodebuild命令:可以指定workspace踏幻,project枷颊,target等各種信息。在vim查看xcodebuidl支持的指令该面。如果要支持指定架構(gòu)夭苗,可以使用 -arch XXX 。
3.lipo -create A B output C吆倦,將A听诸,B合并后導(dǎo)出為C。