一、前提條件:你已經(jīng)創(chuàng)建好自己的xx.framework,如果還沒有自己的xx.framework,請參考:如何創(chuàng)建自己的framework
二、步驟簡要,這里提供了兩種實現(xiàn)方式
方式一:使用shell,簡單方便
方式二:使用手動合成,雖然慢,但是更加體現(xiàn)原理和過程,也能很好的解釋shell中的命令
方式一:
1、生成腳本 并 設置腳本路徑
方式二:
1、獲取真機編譯的framework 和 模擬器編譯的framework;
2、合并framework通過終端命令:lipo -create 真機路徑 模擬器路徑 -output 真機路徑;
3、檢驗合并結果通過終端命令:lipo -info xx.framework/xx
三、方式一的詳細步驟
1、創(chuàng)建添加

創(chuàng)建添加

創(chuàng)建添加

創(chuàng)建添加script
2、復制shell代碼,直接復制我下面的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"
#分別編譯模擬器和真機的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}"
#刪除編譯之后生成的無關的配置文件
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"
#打開合并后的文件夾
open "${UNIVERSAL_OUTPUT_FOLDER}"
3、編譯工程,獲取最終的framework,并驗證是否包含真機和模擬器的架構關于架構:armv7,armv7s,arm64,i386,x86_64

編譯command + B,之后會自動打開xx.framework

驗證是否包含真機和模擬器的架構
四、方式二的詳細步驟
1、桌面創(chuàng)建好文件夾,準備存放真機.framework 和 模擬器.framework

準備好存放真機和模擬器framework的文件夾
2、Xcode工程-Edit scheme...-Run-選中Release

選中release
3、先shift + command + K 清除一下,然后command + B 編譯獲取真機.framework,并放入到真機文件夾中備用

編輯真機.framework

真機.framework

copy真機.framework放入文件夾
4、先shift + command + K 清除一下,然后command + B 編譯獲取模擬器.framework,并放入到模擬器文件夾中備用

編輯模擬器.framework

模擬器.framework

copy模擬器.framework放入文件夾
5、驗證編譯獲取到的真機.framework和模擬器.framework的架構是否對應正確
注意:終端命令 lipo -info xx.framework/xx
關于架構:armv7,armv7s,arm64,i386,x86_64

模擬器架構i386,x86_64

真機架構armv7,armv7s,arm64
5、合并真機和模擬器的framework,這里我是將最終合并的framework,合并到真機.framework中,合并的終端命令:lipo -create 真機路徑 模擬器路徑 -output 真機路徑
注意:這邊的真機路徑 和 模擬器路徑,是xx.framework/xx的路徑

合并framework
6、驗證合并真機和模擬器的結果framework的架構是否包含了真機和模擬器的架構

驗證合并的framework架構是否正確
7、使用framework
這里就不多說了,大家應該都懂,完結。