iOS 自制静态库Framework (一)

715 阅读2分钟

序言

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路径,也就是这个文件夹

最终我们会把真机和模拟器都打包到这个里边 DEVICE_DIR:这是真机的framework地址,你可以选中真机然后command+B,点击framework然后show in folder
SIMULATOR_DIR:这是模拟器的framework地址,同样选中任意一个模拟器然后command+B,点击framework然后show in folder

基本流程就是:

结束

如果不出问题的话,运行aggregate这个target会打开一个文件夹,里边就是最终生成的framework,这时候可以把这个包放到自己工程里边使用了。

可能需要的命令

如果你不确定你的framework生成的是否正确,或者你想要查看生成的framework是真机还是模拟器,还是真机+模拟器,请用下边的命令:

查看库信息: lipo -info sdkPath 看清楚是最终生成的sdk文件,而不是sdk.framework 打开终端,输入lipo -info 然后把

这个拖到终端,回车就ok了。

这个说明当前的包是模拟器的。

这个说明当前包是真机环境的。

运行test_agg 查看生成的framework 最终是这样恭喜你这个包就是你的静态库。