序言
1、本文生成的静态库是不包含cocoapod,如果需要支持cocoapod版本请看下篇文章。
2、SDK是通过脚本生成,并且包含模拟器和真机。
3、本文生成的是静态库,如果不了解动态库和静态库区别点击下方链接。链接地址
4、环境:Xcode版本11.1、OS版本:10.15。
5、对于每一步的配置会有一个简单的解释。
创建工程
配置Build Settings
- Architectures:这个是需要添加armv7s,因为standard architecture = arm64,armv7; 是不包含armv7s,我看有的博客说是不需要添加,可能是因为Xcode版本不一样,所以建议在生成framework之后,通过lipo -info查看一下生成的framework都包含哪些arm架构。
- Build Active Architecture Only:这个设置为NO,一般在我们开发过程中Debug下需要设置为YES,主要是为了加快编译速度,目前我们是sdk,都需要支持所以设置为NO
- Valid Architectures:这个意思是目前支持的有效的框架,但是不是编译生成的ipa支持的arm架构,实际生成的架构是取 Valid Architecture 和Architectures的交集
打包Framework
添加Script:
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
脚本解释:
之前我是觉得这种脚本直接网上copy应该不会有太大问题,但是这次我在实际开发过程中发现脚本版本很多,到底取哪个,以及脚本运行生成的framework放到哪个文件夹,所以特意研究了一下: INSTALL_DIR: 这是包最终生成的framework路径,也就是这个文件夹
基本流程就是:
结束
如果不出问题的话,运行aggregate这个target会打开一个文件夹,里边就是最终生成的framework,这时候可以把这个包放到自己工程里边使用了。
可能需要的命令
如果你不确定你的framework生成的是否正确,或者你想要查看生成的framework是真机还是模拟器,还是真机+模拟器,请用下边的命令:
查看库信息: lipo -info sdkPath 看清楚是最终生成的sdk文件,而不是sdk.framework 打开终端,输入lipo -info 然后把