静态库和动态库

2018-07-17  本文已影响12人  宙斯YY

一.基础概念

1.从开源角度讲,常见库的种类可以分为开源库和闭源库,iOS中静态库和动态库都属于闭源库,常见的AFN,MJExtension属于开源库。
2.静态库和动态库的文件后缀
3.静态库和动态库的区别
4.iOS设备架构

二.静态库打包

.a静态库文件打包
1.创建文件
1.png

此时.a文件是红色状态


2.png
2.创建新文件之后,把头文件暴露给外部使用
3.png
3.修改配置文件并编译

我们需要把Build Active Architecture Only修改为NO,否则生成的静态库就只支持当前选择设备的架构。


4.png

我们分别选择Generic iOS Device和任意一个模拟器各编译一次,编译完后,我们会看到工程中Products文件夹下的libTest.a由红色变成了黑色,然后show in finder,看看生成的文件。


5.png
此时生成Debug-iphoneos/libTools.a和Debug-iphonesimulator/libTools.a两个.a文件,一个是模拟器架构下使用的,一个是真机架构环境下使用的。但都是Debug版本的。
如果想使用Release版本的:
6.png

选择Release并且再次编译。(Release版本比Debug版本运行速度更快,更轻量级)

4.验证.a文件支持的架构环境并合并

把.a文件和头文件集添加进入项目就可以使用。

5.打包前调试

因为静态库只能编译,那么我们如何调试代码呢?
A.新建一个普通工程
B.添加一个.a静态库的TARGETS(配置和编译步骤同上)-图1
C.主工程TARGETS关联静态库-图2、3


1.png

D.引入头文件进行调试


1.png

.framework静态库文件打包

1.创建文件
1.png

此时.framework文件是红色状态


2.png
2.创建新文件后,把头文件暴露给外部使用
3.png
3.修改配置文件并编译

我们需要把Build Active Architecture Only修改为NO,否则生成的静态库就只支持当前选择设备的架构。


4.png

我们分别选择Generic iOS Device和任意一个模拟器各编译一次,编译完后,我们会看到工程中Products文件夹下的TestFramework.framework由红色变成了黑色。
把Mach-O文件修改为静态库类型(因为.framework类型可为动态库也可为静态库)


5.png
此时生成Debug-iphoneos/TestFramework.framework和Debug-iphonesimulator/TestFramework.framework两个.framework文件,一个是模拟器架构下使用的,一个是真机架构环境下使用的。但都是Debug版本的。
如果想使用Release版本的:
6.png

选择Release并且再次编译。(Release版本比Debug版本运行速度更快,更轻量级)

4.验证.a文件支持的架构环境并合并
5.打包前调试(同.a文件)
6.静态库.a和.framework的区别

.a文件只是单纯的二进制文件(代码),而.framework可以包含资源文件(图片音视频-建议使用Bundle包装避免和外部重名)。

上一篇 下一篇

猜你喜欢

热点阅读