iOS打包framework实践一 打包源码
2018-11-15 本文已影响56人
芝麻酱的简书
最近公司多个项目均需要用到同一模块,所以打算把此模块封装成静态库framework,并提交到公司gitlab上使用cocoapods管理,特记录实践过程。
首先把代码打包到framwork中:
新建工程,选择Cocoa Touch Framework
系统会默认创建一个以工程名字命名的头文件
ZMJTestFramework.h
,我们需要把暴露给外界使用的文件在ZMJTestFramework.h
中import
把代码拖入到新建的framework工程中(以ZMJView
为例),现在我们需要把ZMJView
暴露出来,所以在ZMJTestFramework.h
头文件中按照系统提示的格式引入:
然后配置framwork,增加模拟器架构支持,来让打包出来的framework可以在模拟器上运行:
然后更改要打包的framework类型为静态库:
屏幕快照 2018-11-15 10.33.09.png
最后把上面👆 在头文件中import
的ZMJView
添加到编译Headers的Public列表:
注:
- Public列表的文件是要暴露给外界使用的
- Project列表中的文件是要隐藏在framework中不让外界知晓的
然后更改编译版本为release版本:
现在一个简单的framework工程已经配置完成了,我们需要编译成framework文件来交付给别人使用。
编译方式1:
选择任一模拟器 Command + b编译:
然后选中工程文件列表Products中的.framework文件,右键show in finder,看到的就是最终生成的framework文件:
此时得到的framework只支持模拟器使用,如果想要在真机中使用,需要再选中真机然后Command + b编译,然后show in finder得到的framework就可以在真机中使用。
编译方式2:
在图中位置,生成script脚本:
然后添加如下脚本:
(脚本来源:https://www.jianshu.com/p/7f6a7e1b3235 十分感谢)
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
真机和模拟器都Build一遍之后就会在工程目录下生成Products文件夹,文件夹中的framework就是我们需要的文件。
使用的时候,直接把生成的framework文件拖入到目标工程,然后import
引入,即可使用: