iOS 静态库 .a 和 .framework 介绍以及制作
2020-10-24 本文已影响0人
望穿秋水小作坊
一、库相关概念介绍
1. 为什么需要静态库?
- 想让别人使用你的代码,又
不能让别人看到
你代码内部的具体实现
就需要静态库,比如开发第三方的 SDK。 - 把一些
固定的模块
抽成静态库便于管理维护
2. iOS 中静态库有哪两种形式?
-
.a
和.framework
3. iOS 中动态库有哪两种形式?
-
.dylib
和.framework
- 因为系统的
.framework
是动态库,我们自己建立的.framework
是静态库
4. 动态库和静态库的区别?
- 静态库,在程序
链接时完整的拷贝
到可执行文件中,被多次使用就有多份冗余拷贝
。 - 动态库,在程序
链接时不复制
,程序运行时由系统 dyld 加载到内存
,供程序使用,可多个程序共享
。
5. .a 和 .framework 区别?
-
结构上:
.a
是纯二进制文件;.framework
中除了有二进制文件以外还有资源文件.a + .h + source = .framework
-
使用上:
.a
文件不能直接使用,至少还要.h
文件配合;.framework
可以直接使用,因为本身包含.h
文件
二、借助 Xcode 制作 .a 静态库
1. Xcode 创建一个 Static Library 项目
Static Library 项目2. Build Active Architecture Only 设置成 NO
修改Build Active Architecture Only配置当Debug和Release属性设置为YES时,是为了debug的时候编译速度更快,它只编译当前的architecture版本;
当而设置为NO时,会编译所有的版本;
3. iOS Deployment Target 设置
image.png4. 在 YYStaticTool.h 和 YYStaticTool.m 中编写我们的工具库代码
// // YYStaticTool.h
@interface YYStaticTool : NSObject
+ (void)sayHi;
@end
// YYStaticTool.m
@implementation YYStaticTool
+ (void)sayHi {
NSLog(@"hello static lib~");
}
@end
5. 分别在模拟器和 iOS Device 中 Build
Build 获得两种模式下的.a 文件6. 使用 lipo 命令行指令可以合并它们
lipolipo -create libStaticTest.a(真机.a文件路径) libStaticTest.a(模拟器.a文件路径) -output 保存路径/StaticTest.a
7. 拿到合成的 libYYStatic.a 和 YYStaticTool.h 文件,我们创建一个 Demo 程序,把他们拖入 Demo 项目中。
使用.a静态库三、借助 Xcode 制作 .framework 静态库(带第三方库和图片)
1.创建 .framework 项目
创建 .framework 项目2. 设置项目的 Build Settings
- Build Active Architecture Only 设置成 NO
- iOS Deployment Target 设置