framework开发中每次手动打包生成模拟器与真机包都比较麻烦需要使用终端执行lipo命令,大家都知道自动打包总比手动每次合成包体的简单,所以本文介绍了两种利用脚本打包框架的方式,解放你的双手。
1、使用run script自动打包生成包
A.编辑脚本
cd ${BUILD_ROOT}
echo "Prodcut Path ${BUILD_ROOT}"
#编译环境的判断
if ${DEBUG}
then
environment="Debug"
else
environment="Release"
fi
#Create a variable
framework_name=${TARGET_NAME}
# start create xcframework
xcrun xcodebuild -create-xcframework \
-framework $environment-iphoneos/$framework_name.framework \
-framework $environment-iphonesimulator/$framework_name.framework \
-output ${SRCROOT}/output/$framework_name.xcframework
# end xcframework
# start create framework
lipo -create $environment-iphoneos/$framework_name.framework/$framework_name \
$environment-iphonesimulator/$framework_name.framework/$framework_name \
-output $framework_name;
# end framework
#将框架文件复制到当前路径
cp -r $environment-iphoneos/$framework_name.framework ./
#Put the synthesized file in the In framework
cp -r $framework_name $framework_name.framework/;
rm $framework_name;
B:build项目自动执行
使用run script执行sh脚本,
image.png
将脚本代码放入run script中
image.png
切换到framework scheme中编译release与debug包,然后查看项目文件根目录中会出现framework文件夹,其中便包含了x86与arm64架构的framework与xcframework
2、利用终端执行.sh文件
## !/bin/sh
#echo "Please run this in current directory"
#BUNDLE_VERSION=$1
#if [ -z "$BUNDLE_VERSION" ]; then
# echo "BUNDLE_VERSION is empty exit"
# exit
#else
# echo "BUNDLE_VERSION: $BUNDLE_VERSION"
#fi
#BUILD_NUMBER=1
CLIENT_WORKSPACE="$PWD"
BUILD_WORKSPACE=${CLIENT_WORKSPACE}
##进入编译目录
cd ${BUILD_WORKSPACE}
XCWORKSPACE_NAME='请输入当前.xcworkspace名称'
FRAMEWORK_NAME='请输入当前.xcworkspace下的framework名称'
OUTPUT_DIR=${BUILD_WORKSPACE}/Build/Products
DEVICE_OUTPUT_DIR=${OUTPUT_DIR}/Release-iphoneos
SIMULATOR_OUTPUT_DIR=${OUTPUT_DIR}/Release-iphonesimulator
#清空OUTPUT_DIR
rm -rf ${OUTPUT_DIR}
#ios release
xcodebuild -workspace ${XCWORKSPACE_NAME}.xcworkspace -scheme ${FRAMEWORK_NAME} -destination="iOS" -sdk iphoneos -configuration Release SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES -derivedDataPath ./
#ios simulator release
xcodebuild -workspace ${XCWORKSPACE_NAME}.xcworkspace -scheme ${FRAMEWORK_NAME} -destination="iOS Simulator" -sdk iphonesimulator -configuration Release SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES -derivedDataPath ./
#如果输出目录存在,即移除该目录,再创建该目录。目的是为了清空输出目录。
if [ -d ${OUTPUT_DIR}/${FRAMEWORK_NAME}.xcframework ]; then
rm -rf ${OUTPUT_DIR}/${FRAMEWORK_NAME}.xcframework
fi
#将打包好的framwork合并成xcframework
#KMeetingKit
xcodebuild -create-xcframework -framework ${DEVICE_OUTPUT_DIR}/${FRAMEWORK_NAME}/${FRAMEWORK_NAME}.framework -framework ${SIMULATOR_OUTPUT_DIR}/${FRAMEWORK_NAME}/${FRAMEWORK_NAME}.framework -output ${OUTPUT_DIR}/${FRAMEWORK_NAME}.xcframework
#打开输出目录
open ${OUTPUT_DIR}
1.创建一个为.sh后缀的文件放到项目目录中,复制脚本代码到.sh文件内。
2.打开终端cd到项目目录中执行命令 sh xxx.sh
总结:
大家看得出来其实两种方式大同小异,都是利用脚本的方式去打包,不过方式1需要手动build一下项目,方式二是利用终端build项目,相对来说的话第二种方式会简单一点,看各位大佬的使用场景选择相对应的方式就可以了。关于脚本的话其实看起来也比较简单,如果出包失败主要看看路径是否正确。