一、前提條件:你已經(jīng)創(chuàng)建好自己的xx.framework,如果還沒(méi)有自己的xx.framework,請(qǐng)參考:如何創(chuàng)建自己的framework
二旷痕、步驟簡(jiǎn)要,這里提供了兩種實(shí)現(xiàn)方式
方式一:使用shell顽冶,簡(jiǎn)單方便
方式二:使用手動(dòng)合成欺抗,雖然慢,但是更加體現(xiàn)原理和過(guò)程强重,也能很好的解釋shell中的命令
方式一:
1绞呈、生成腳本 并 設(shè)置腳本路徑
方式二:
1团滥、獲取真機(jī)編譯的framework 和 模擬器編譯的framework;
2报强、合并framework通過(guò)終端命令:lipo -create 真機(jī)路徑 模擬器路徑 -output 真機(jī)路徑灸姊;
3、檢驗(yàn)合并結(jié)果通過(guò)終端命令:lipo -info xx.framework/xx
三秉溉、方式一的詳細(xì)步驟
1力惯、創(chuàng)建添加
創(chuàng)建添加
創(chuàng)建添加
創(chuàng)建添加script
2、復(fù)制shell代碼召嘶,直接復(fù)制我下面的shell代碼父晶,到你的工程中就行了,不用做任何更改
image.png
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}_Products/"
#創(chuàng)建輸出目錄弄跌,并刪除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
#分別編譯模擬器和真機(jī)的Framework
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
xcodebuild -target "${TARGET_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
#拷貝framework到univer目錄
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"
#合并framework甲喝,輸出最終的framework到build目錄
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"
#刪除編譯之后生成的無(wú)關(guān)的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
for file in ls $dir_path
do
if [[ ${file} =~ ".xcconfig" ]]
then
rm -f "${dir_path}/${file}"
fi
done
#判斷build文件夾是否存在,存在則刪除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打開(kāi)合并后的文件夾
open "${UNIVERSAL_OUTPUT_FOLDER}"
3铛只、編譯工程埠胖,獲取最終的framework,并驗(yàn)證是否包含真機(jī)和模擬器的架構(gòu)關(guān)于架構(gòu):armv7,armv7s,arm64,i386,x86_64
編譯command + B淳玩,之后會(huì)自動(dòng)打開(kāi)xx.framework
驗(yàn)證是否包含真機(jī)和模擬器的架構(gòu)
四直撤、方式二的詳細(xì)步驟
1、桌面創(chuàng)建好文件夾蜕着,準(zhǔn)備存放真機(jī).framework 和 模擬器.framework
準(zhǔn)備好存放真機(jī)和模擬器framework的文件夾
2谋竖、Xcode工程-Edit scheme...-Run-選中Release
選中release
3、先shift + command + K 清除一下承匣,然后command + B 編譯獲取真機(jī).framework蓖乘,并放入到真機(jī)文件夾中備用
編輯真機(jī).framework
真機(jī).framework
copy真機(jī).framework放入文件夾
4、先shift + command + K 清除一下韧骗,然后command + B 編譯獲取模擬器.framework嘉抒,并放入到模擬器文件夾中備用
編輯模擬器.framework
模擬器.framework
copy模擬器.framework放入文件夾
5、驗(yàn)證編譯獲取到的真機(jī).framework和模擬器.framework的架構(gòu)是否對(duì)應(yīng)正確
注意:終端命令 lipo -info xx.framework/xx
關(guān)于架構(gòu):armv7,armv7s,arm64,i386,x86_64
模擬器架構(gòu)i386,x86_64
真機(jī)架構(gòu)armv7,armv7s,arm64
5宽闲、合并真機(jī)和模擬器的framework众眨,這里我是將最終合并的framework握牧,合并到真機(jī).framework中容诬,合并的終端命令:lipo -create 真機(jī)路徑 模擬器路徑 -output 真機(jī)路徑
注意:這邊的真機(jī)路徑 和 模擬器路徑,是xx.framework/xx的路徑
合并framework
6沿腰、驗(yàn)證合并真機(jī)和模擬器的結(jié)果framework的架構(gòu)是否包含了真機(jī)和模擬器的架構(gòu)
驗(yàn)證合并的framework架構(gòu)是否正確
7览徒、使用framework
這里就不多說(shuō)了,大家應(yīng)該都懂颂龙,完結(jié)习蓬。