版本记录
版本号 | 时间 |
---|---|
V1.0 | 2019.06.12 星期三 |
前言
做了几年的项目,基本都是对接三方的SDK,这里就自己封装一下SDK,顺便做个记录,希望有技术大牛多给我批评指正,也希望可以给别人以帮助和借鉴。
基本概念
写作环境:xcode 10.2.1
1. 库
什么是库
库是程序代码的集合,是共享程序代码的一种方式。
分类
- 开源库
- 公开源代码,可以看到具体实现,比如AFN和SDWebImage等。
- 闭源库
- 不公开源代码,是经过编译的二进制文件,看不到具体实现。
- 主要分为:静态库和动态库
静态库和动态库
- 存在形式
- 静态库:
.a
和.framework
。 - 动态库:
.dylib
和.framework
。
- 静态库:
自己建立的
.framework
是静态库,系统的.framework
是动态库。
.a
和.framework
的区别:
- 1)
.a
是一个纯二进制文件,.framework
中除了有二进制文件之外还有很多资源文件。- 2)
.a
不能直接使用,至少要有.h
文件配合,.framework
文件可以直接使用。- 3)
.framework == .a + .h + sourceFile
- 区别
- 静态库:链接时,静态库会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝。
- 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统仅加载一次,多个程序共用,节省内存。
.framework
1. 生成SDK
配置
command + shift + N
新建立工程,并选择如下:
![](https://img.haomeiwen.com/i3691932/60bc89a9422047a0.png)
起一个名字,并保存到桌面
![](https://img.haomeiwen.com/i3691932/0fde3d45a9699b37.png)
建好的工程目录如下所示:
![](https://img.haomeiwen.com/i3691932/210fa29ec1fd3063.png)
接着进行配置
![](https://img.haomeiwen.com/i3691932/b54e6803f88f3d0c.png)
接着进行配置
![](https://img.haomeiwen.com/i3691932/e26e786050a621b8.png)
新建类(JJSDKDemo
)
![](https://img.haomeiwen.com/i3691932/bd9f97172b4e6173.png)
并添加新的方法
![](https://img.haomeiwen.com/i3691932/e51e13d0cce5d7c2.png)
![](https://img.haomeiwen.com/i3691932/5849ee09cebeba2c.png)
暴露头文件
![](https://img.haomeiwen.com/i3691932/d7e9136097374206.png)
但是最好按照它的建议写成下面这个样子
![](https://img.haomeiwen.com/i3691932/bd08e5a23bd49c24.png)
Edit Scheme
![](https://img.haomeiwen.com/i3691932/3e5a11f1fd254098.png)
选择Release
![](https://img.haomeiwen.com/i3691932/8082b9bfa2df2cfc.png)
打包
下面就开始打包了,选中真机,command + B
![](https://img.haomeiwen.com/i3691932/7d7943138fd908ee.png)
选中下面
![](https://img.haomeiwen.com/i3691932/e3beec677f8f0285.png)
并Show in Finder
![](https://img.haomeiwen.com/i3691932/906505392bbc5b29.png)
打开终端输入命令lipo -create
![](https://img.haomeiwen.com/i3691932/bab618931a191904.png)
把真机的JJFrameworkSDK.framework
下的JJFrameworkSDK
拖到终端。
![](https://img.haomeiwen.com/i3691932/b9a416cf5ec794b3.png)
输出到指定目录,在桌面上新建立一个home
文件夹。
![](https://img.haomeiwen.com/i3691932/fd1a12203bd92eb1.png)
合成以后
![](https://img.haomeiwen.com/i3691932/5da554e9b2f01f94.png)
把下面目录中的文件替换成home新生成的文件
![](https://img.haomeiwen.com/i3691932/8d7d9a2ac50f5a4c.png)
替换以后将这个framework
拷贝出去就可以使用了
![](https://img.haomeiwen.com/i3691932/84ba5000ac56eaa2.png)
2. 使用SDK
下面就新建工程,新建立一个和上面不同的工程。
![](https://img.haomeiwen.com/i3691932/66afec9af9eb3275.png)
![](https://img.haomeiwen.com/i3691932/834a379097e48563.png)
将生成的SDK拷贝到新建立的工程中,直接往里拖就可以
![](https://img.haomeiwen.com/i3691932/4e48453ea7dd8d04.png)
拖动进去后如下所示:
![](https://img.haomeiwen.com/i3691932/43794c0ab5e5e967.png)
这里会展示找不到头文件的错误
![](https://img.haomeiwen.com/i3691932/a6039505e98f3d75.png)
这是因为生成库之前,没有将对应的类拖动public中,所有只能按照下面方式重新拖动到public中,再次lipo -create
生成库走一遍流程。
![](https://img.haomeiwen.com/i3691932/a57a41f5637c9b65.png)
重新将SDK拖进去并Run就不再报错了。下面看一下调用:
![](https://img.haomeiwen.com/i3691932/efa41329172c9492.png)
可以看见就输出了SDK中封装的NSLog了。
到此为止,这个demo就此完毕了。
后记
本篇主要讲述了一种.framework SDK的生成和使用,感兴趣的给个赞或者关注~~~
![](https://img.haomeiwen.com/i3691932/57e3cbc9ee3d71b2.png)
网友评论