天天看點

iOS-真機模拟器腳本合并(坑)

網上有一種自動腳本shell合并方案,完整腳本代碼如下:

#!/bin/sh made by wxy
#要build的target名
TARGET_NAME="ZDAdSDK"
if [[ $1 ]]
then
TARGET_NAME=$1
fi

#定義輸出目錄,友善下文使用
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/Products/${CONFIGURATION}"

#建立輸出目錄,并删除之前的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}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"

#針對xcode12會産生arm64架構做的處理。移除模拟器arm64架構
lipo -remove arm64 "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -o "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"

#合并模拟器、真機framework,輸出最終的framework到UNIVERSAL_OUTPUT_FOLDER目錄
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}"
           

Command+B編譯後,路徑打開了,如下圖所示,打包少檔案:

iOS-真機模拟器腳本合并(坑)

1.png

正常iOS build的framework都是下列五個檔案:

iOS-真機模拟器腳本合并(坑)

2.png 問: 上述腳本那裡有問題,我排查了好久也沒發現,不知道為什麼打包出來的framework就莫名的少檔案,是以換了另一個腳本來解決 - iOS-真機模拟器腳本合并framework(親測可用), 如果那位大佬發現了上述腳本的問題,歡迎給我留言,不勝感激。