一.IOS库简介
静态库与动态库
静态库:
在编译的时候会被直接拷贝一份,复制到目标程序里。牺牲app体积来减少编译时间。
一般以.a 和 .framework为文件后缀名
动态库:
链接时不复制,程序运行时由系统动态加载到内存,加载一次,多个程序共用节省内存。
以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。
framework与.a
.a是一个纯二进制文件,.framework中除了有二进制文件外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework
综上所述,现阶段制作sdk,使用framework形式的静态库较为合适
二.创建Framework
打开xcode 创建framework项目
三.配置framework参数
在targets下选中framework,并在Build Settings下更改几个参数。
Mach-O Type : Static Library (改为静态库)o
Build Active Architeture Only : NO (编译支持的所有的版本)
Vaild Architetures 包含:arm64 armv7 armv7s(编译所包含的版本)
Dead Code Stripping : NO (去掉不会执行到的代码)
Link With Standard Libraries : NO (避免重复链接)
关于bitcode设置,现如今做一些配置可支持bitcode,暂未发现问题
当然关闭bitcode可省不少麻烦
Enable bitcode : NO/YES (设置成NO后,则接入的app也需要将Enable bitcode设置为NO)
若Enable bitcode 为 YES ,则需要在framework的build settings增加:
Other Linker Flags : -fembed-bitcode
四.写一点代码
添加文件和写代码方式和写项目一样,没啥说的,随便写一个类,给一个功能试试
写一个输出某Log的方法
在.m中实现一些输出Log
在.h中添加方法说明,给使用者看
五.暴露头文件
项目中有多个头文件时,我们需要决定哪些头文件可以让使用者看到(SDK需要暴露的功能)
通常将SDK的功能封装起来,调用API放在某几个.h中,加上注释暴露给使用者
而其他逻辑代码的头文件则作为私有的
所有的.m文件都会被混淆进framework中
Build Phases - Header - Public 中为暴露的头文件 (一般放封装的API的头文件)
Build Phases - Header - Private 中为私有的头文件 (一般这里不放东西)
Build Phases - Header - Project 中为逻辑代码头文件 (一般逻辑代码放在此处,使用方看不到这里的代码)
六.暴露API
将含有API的.h写上注释
并import至framework的同名.h中
方便使用者在使用SDK时,只需要导入<DemoSDK/DemoSDK.h>即可