什么是SDK开发?
日常开发中,我们会遇到某些情况不能提供源码,项目组件化等需求,这时候我们就可以使用SDK开发,在OC的开发中,我们涉及到的一般是静态库(.a)或者动态库(.framework)。(注:不是所有的.framework就一定是动态库)
静态库与动态库的区别?
静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。表现形式为 .a和.framework
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
表现形式为 .dylib和.framework
注意:动态库只能苹果使用,如果项目中使用了动态库不允许上架(如:jspatch)
a与.framework有什么区别?
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
建议用.framework.
接下来将以实例帮助大家创建一个自己的.framework
首先我们先创建一个.workspace
workspace
创建完毕后,再创建一个
.frmawork
创建frmawork
将创建好的
frmawork
加入到workspace
image.png
在
framewrok
中可以封装入自己需要封装的内容image.png
eg: 我在
StringUtils
中加入了一个测试方法
#import "StringUtils.h"
@implementation StringUtils
+ (NSString *)testString:(NSString *)string {
return [@"MQTestFramework: " stringByAppendingString:string];
}
@end
接下来进行项目配置:
1、设置Build Setting参数 将Build Active Architecture only设置为NO
image.png
2、设置Build Setting参数 Mach-O Type 为Static Library (配置静态、动态)
image.png
3、设置Build Setting参数 在Architectures下增加armv7s
image.png
4、在Build Phases中设置需要公开和需要隐藏的头文件
image.png
5、将头文件引入到MQTestFramwork
(自己SDK的头文件)
image.png
6、
Command + B
运行项目,在Product
中找到framework
image.png
framework使用
将封装好的.framework
拉入需要使用的项目中
image.png
使用封装好的功能
image.png
运行:
image.png