face++静态库转为动态库之二
2019-04-22 11:45 jiangys 阅读(775) 评论(0) 编辑 收藏 举报上一篇的时候,已经介绍了如何将carthage转为动态库。这一篇,我们是单纯的建一个动态库。还是以face++为例
查看上一篇: face++静态库转为动态库
制作动态库
1、创建一个工程MGLiveDetect
创建成功后如下图,并删除多出来的MGLiveDetect.h
2、将Face++下面的三个文件,拉进工程
- MGFaceIDBaseKit.framework
- MGFaceIDLiveDetect.framework
- MGFaceIDLiveCustomDetect.bundle
并将MGFaceIDLiveDetect.framework下面的几个头文件拉出来
保证拉出来的文件路径是一样的,都是指向 MGFaceIDLiveDetect.framework --> Headers里面
3、修改framework的Deployment Target支持8.0以上
4、配置你的framework
- 工程 -> 选择framework所在的Target -> 选择Build Phases
- 点击Header左下角的+号把你要暴露的头文件添加到Public里面(默认添加到Project里面,用鼠标把它拽过去)
- 在Compile source里面添加实现的.m文件。由于没有.m文件,可以直接忽略掉
- 在Link Binary With Libraries 中,将libs的文件全部增加进去,同时,还需要将demo里所有依赖的系统framework也增加进去。
5、配置类别和支持的Bitcode
- Mach-O Type要选择Dynamic Library
- Buld Setting中Build Active Architecture Only 选Release为 No (默认就是NO)
- 在Build Settings的Linking的Other Linker Flags里加上
-all_load
- 工程需要支持bitcode,需要在Other C Flags 里加上
-fembed-bitcode
说明:如果你使用了类别,那么你需要在Build Settings的Linking的Other Linker Flags里加上。为了避免麻烦,直接改为 -all_load
6、face++特殊配置(其它可以忽略)
face++的静态库是采用Objective-C++的方式来实现,还需要再指定编译方式。
因此,我们需要改一下如下配置
7、配置支持真机和模拟器
第一步:新建一个脚本
第二步,填入脚本
相关的脚本
# Type a script or drag a script file from your workspace to insert its path. 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
8、编译
选择真机编译模式,按 command + shift + B 快捷键编译,就会直接生成动态库 MGLiveDetect.framework