这是我从网上找到的合并真机和模拟器Framework包的脚本
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if [[ $1 ]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/"
#创建输出目录,并删除之前的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}"
lipo "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" -remove arm64 -output "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}"
#合并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}"
![](https://img.haomeiwen.com/i11874682/f6d225a3fbf7125e.png)
![](https://img.haomeiwen.com/i11874682/4a57835a748231b5.png)
一番操作,然而什么事情都没有发生,仔细研究脚本原来是需要项目名和Framework名相同才可以,如果名称不同的话,那么这个脚本是找不到生成的Framework文件的.
#要build的target名
TARGET_NAME=${PROJECT_NAME}
FRAMEWORK_NAME="你的Framework的名称"
if[[ $1]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}/OUT_FRAMEWORK"
#创建输出目录,并删除之前的framework文件
mkdir -p"${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf"${UNIVERSAL_OUTPUT_FOLDER}/${FRAMEWORK_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/${FRAMEWORK_NAME}.framework""${UNIVERSAL_OUTPUT_FOLDER}"
lipo"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"-remove arm64 -output"${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"
#合并framework,输出最终的framework到build目录
lipo -create -output"${UNIVERSAL_OUTPUT_FOLDER}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}""${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"
open"${UNIVERSAL_OUTPUT_FOLDER}"
于是我修改了一下这个脚本,将我要打包的脚本名直接设置给他,就可以了.
其中UNIVERSAL_OUTPUT_FOLDER是输出的文件夹,可以自己喜好更改.
*Xcode的一下脚本变量:
随便在脚本敲一下东西,然后运行,出错,这个时候bug会输出Xcode的一下变量
![](https://img.haomeiwen.com/i11874682/bf986cd883f1f3bc.png)
网友评论