iOS開發(fā)自己的Framework之·真機模擬器合并

一、前提條件:你已經(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

這里就不多說了,大家應該都懂,完結。

五、參考鏈接:

shell方式
shell方式
方式二

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容