[需求及问题点]
有一天,产品提了个需求:最近,我们买了XXX的人脸识别SDK,但是很贵.所以我们想这样搞,把我们买的xxxSDK结合后端接口包装包装,再搞成一个给商户App们用的人脸识别SDK出来,同时,这个界面要美观大气….
-=-=-=-=-=-=-=
往往这种时候,把xxx的SDK用起来不难.但是对于SDK(.a或则.framework)中的静态库,我们不清楚里面用了哪些东西,而同时,我们在二次包装这个SDK的同时,如果使用了AFN等三方库,有可能导致使用这个二次SDK的小伙伴的App工程不能使用AFN等.
-=-=-=-=-=-=
解决的方法是, 使用CocoaPods打包成静态库,结合cocoapods-packager这个插件完成.framework静态库的打包(.a也可以)
1 首先了解.a与.framework的区别
一、库:
库是共享程序代码的方式,一般分为静态库和动态库二、静态库与动态库的区别:
静态库:连接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库:连接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。三、iOS静态库形式和动态库形式:
静态库:.a和.framework
动态库:.dylib和.framework四、framework静态库和动态库的区分:
系统的.framework是动态库,我们自己建立的.framework是静态库五、.a和.framwork的区别:
.a是一个纯二进制文件,.framework中除了有二进制文件外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework
2 具体操作(前提安装好cocoapods)
1. 使用cocoaPods开发静态库
为什么要使用cocoaPods的命令行工具来开发静态库?
其实主要不是真的用于开发本文中这个二次包装的SDK,这个二次SDK完全可以由你自己通过Xcode创建一个demo工程,在里面完成这个二次SDK的所有功能.
那么为什么要使用pod lib create xxxLib
来创建呢, 主要是为了得到这个
这是一个 SOCR 文件夹的全部内容 , 有个这个文件夹及文件,我们才可以接着操作
2.打开SOCR.podspec文件,修改类库配置信息,结果像这样。
#
# Be sure to run `pod lib lint SOCRLib.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
# 名字要一致
s.name = 'SOCRLib'
# 版本要和git的tag版本一致
s.version = '0.2.0'
# 描述
s.summary = '活体识别SDK二次封装'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the descripti