face++静态库转为动态库之二 face++静态库转为动态库

上一篇的时候,已经介绍了如何将carthage转为动态库。这一篇,咱们是单纯的建一个动态库。仍是以face++为例html

查看上一篇: face++静态库转为动态库iphone

制做动态库

一、建立一个工程MGLiveDetect

建立成功后以下图,并删除多出来的MGLiveDetect.hpost

二、将Face++下面的三个文件,拉进工程

  • MGFaceIDBaseKit.framework
  • MGFaceIDLiveDetect.framework
  • MGFaceIDLiveCustomDetect.bundle

并将MGFaceIDLiveDetect.framework下面的几个头文件拉出来ui

保证拉出来的文件路径是同样的,都是指向 MGFaceIDLiveDetect.framework --> Headers里面url

三、修改framework的Deployment Target支持8.0以上

四、配置你的framework

  1. 工程 -> 选择framework所在的Target -> 选择Build Phases
  2. 点击Header左下角的+号把你要暴露的头文件添加到Public里面(默认添加到Project里面,用鼠标把它拽过去)
  3. 在Compile source里面添加实现的.m文件。因为没有.m文件,能够直接忽略掉
  4. 在Link Binary With Libraries 中,将libs的文件所有增长进去,同时,还须要将demo里全部依赖的系统framework也增长进去。

五、配置类别和支持的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_loadspa

六、face++特殊配置(其它能够忽略)

face++的静态库是采用Objective-C++的方式来实现,还须要再指定编译方式。3d

所以,咱们须要改一下以下配置code

七、配置支持真机和模拟器

第一步:新建一个脚本htm

第二步,填入脚本blog

相关的脚本

# 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

八、编译

选择真机编译模式,按 command + shift + B 快捷键编译,就会直接生成动态库 MGLiveDetect.framework