xcodebuild 导出framework

场景

framework开发中,需要导出framework给其他人使用。
他人可能使用模拟器,也可能使用真机。
所以需要你提供的framewor同时支持模拟器和真机。

思路

启动shell脚本:

  1. build release版本 模拟器适用的framework
  2. build release版本 真机适用的framework
  3. 合并1,2步骤中生成的framework并导出

使用xcodebuild+shell

前提:
保证framework在模拟器上build和generic iOS device上build没有错误,
且生成的framewor可以在相应的环境中适用。

1.启动shell脚本
方式一
image.png
image.png
方式二
image.png
2.shell脚本编写
FRAMEWORK_NAME='framework的名字'
WORK_DIR='build'
#release环境下,generic ios device编译出的framework。这个framework只能供真机运行。
DEVICE_DIR=${WORK_DIR}/'Release-iphoneos'/${FRAMEWORK_NAME}'.framework'
#release环境下,simulator编译出的framework。这个framework只能供模拟器运行。
SIMULATOR_DIR=${WORK_DIR}/'Release-iphonesimulator'/${FRAMEWORK_NAME}'.framework'
#framework的输出目录
OUTPUT_DIR=${SRCROOT}/'Products'/${FRAMEWORK_NAME}'.framework'

##xcodebuild打包
xcodebuild -target ${FRAMEWORK_NAME}
ONLY_ACTIVE_ARCH=NO
-configuration 'Release'
-sdk iphoneos clean build

xcodebuild -target ${FRAMEWORK_NAME} 
ONLY_ACTIVE_ARCH=NO 
-configuration 'Release' 
-sdk iphonesimulator clean build

#如果输出目录存在,即移除该目录,再创建该目录。目的是为了清空输出目录。
if [ -d ${OUTPUT_DIR} ]; then
rm -rf ${OUTPUT_DIR}
fi
mkdir -p ${OUTPUT_DIR}

#复制release-simulator下的framework到输出目录
cp -r ${DEVICE_DIR}/ ${OUTPUT_DIR}/

#lipo命令合并两种framework,将SVProgressHUD.framework/SVProgressHUD,覆盖输出到输出目录。
lipo -create ${DEVICE_DIR}/${FRAMEWORK_NAME} ${SIMULATOR_DIR}/${FRAMEWORK_NAME} -output ${OUTPUT_DIR}/${FRAMEWORK_NAME}

rm -r ${WORK_DIR}
#打开输出目录
open ${OUTPUT_DIR}

shell代码分析:
1.build路径:xcodebuild打包命令生成的文件,位于对应 .xcodeproj 的同级build目录下。


image.png

2.xcodebuild命令:可以指定workspace,project,target等各种信息。在vim查看xcodebuidl支持的指令。如果要支持指定架构,可以使用 -arch XXX 。
3.lipo -create A B output C,将A,B合并后导出为C。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容