face++静态库转为动态库之二
上一篇的时候,已经介绍了如何将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

face++静态库转为动态库之二的更多相关文章
- face++静态库转为动态库
前言 苹果商店上架应用,有规定支持iOS8.0以上的iPA可执行文件的大小不能超过60M. face++提供过来的是静态库,会导致苹果上架的ipa的包增加1.5M左右.而刚好我们的APP包Mach-O ...
- Carthage 让项目支持及使用,第三方静态库转为动态库
Carthage介绍 具体使用,可以查看官网的,文档地址 https://github.com/Carthage/Carthage.如果看不懂英文,可以看一下官文的翻译:https://www.jia ...
- autotools入门笔记(二)——创建和使用静态库、动态库
带有静态库或者动态库的工程的构建过程与上一节()只包含一个源文件的工程的构建过程是类似的.只是对于复杂的工程,如果包含多个还有源文件的目录时,需要对每个包含源文件的目录执行构建过程,另外创建和使用库文 ...
- C++ 系列:静态库与动态库
转载自http://www.cnblogs.com/skynet/p/3372855.html 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择 ...
- C++静态库与动态库
C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- VS中Debug和Realease、及静态库和动态库的区别整理(转)
原文出自:http://www.cnblogs.com/chensu/p/5632486.html 一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不 ...
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
最近在编写的一个Apache kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a 静态库编译的,,,而我们这 ...
- VS中Debug和Realease、及静态库和动态库的区别整理
一.Debug和Realease区别产生的原因 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程序在代码 ...
随机推荐
- CTeX入门出坑
终于出了入门坑.大致风格可以了.赶紧记下来. \documentclass{ctexbook} \usepackage{amsmath} \usepackage{amsfonts} \usepacka ...
- eclipse 界面开发--windowbuilder
插件地址: http://www.eclipse.org/windowbuilder/download.php http://www.eclipse.org/windowbuilder/
- http连接基础类,负责底层的http通信
/// <summary> /// http连接基础类,负责底层的http通信 /// </summary> public class HttpService { public ...
- Android系统层次解析
目标:从宏观上解释Android整个系统结构 来源: <Android4高级编程> 目录: 1. Android软件栈结构 一.Android软件栈结构 Android软件栈分为四个结构: ...
- JavaScript(七)
类型转换 1.直接转换 parseInt() 与 parseFloat() alert('12'+7); //弹出127 alert( parseInt('12') + 7 ); //弹出19 ale ...
- ZAB协议与Paxos算法
ZooKeeper并没有直接采用Paxos算法,而是采用一种被称为ZAB(ZooKeeper Atomic Broadcast)的一致性协议 ZooKeeper是一个典型的分布式数据一致性的解决方案, ...
- css实现连续数字和英文的自动换行的方法
1.(IE浏览器)连续的英文字符和阿拉伯数字,使用word-wrap : break-word ;或者word-break:break-all;实现强制断行 #wrap{word-break:brea ...
- org.hibernate.exception.SQLGrammarException: could not extract ResultSet &&&&&Incorrect syntax near '@P0'.
这个故障的原因比较多: 1.如数据库中的字段和类中的字段类型不一致: 2.数据库dialect不够具体 myeclispe自动生成的是 org.hibernate.dialect.SQLServer ...
- [LeetCode] Shortest Distance to a Character 到字符的最短距离
Given a string S and a character C, return an array of integers representing the shortest distance f ...
- 19个实例学会plsql
--p1 begin dbms_output.put_line('你好 世界'); end; --p2 引入变量 declare age ; height ; begin dbms_output.pu ...