美文网首页iOS 开发 Objective-C
iOS 静态库 .a 和 .framework 介绍以及制作

iOS 静态库 .a 和 .framework 介绍以及制作

作者: 望穿秋水小作坊 | 来源:发表于2020-10-24 17:19 被阅读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

当Debug和Release属性设置为YES时,是为了debug的时候编译速度更快,它只编译当前的architecture版本;
当而设置为NO时,会编译所有的版本;

修改Build Active Architecture Only配置
3. iOS Deployment Target 设置
image.png
4. 在 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 命令行指令可以合并它们

lipo -create libStaticTest.a(真机.a文件路径) libStaticTest.a(模拟器.a文件路径) -output 保存路径/StaticTest.a

lipo
7. 拿到合成的 libYYStatic.a 和 YYStaticTool.h 文件,我们创建一个 Demo 程序,把他们拖入 Demo 项目中。
使用.a静态库

三、借助 Xcode 制作 .framework 静态库(带第三方库和图片)

1.创建 .framework 项目
创建 .framework 项目
2. 设置项目的 Build Settings
  • Build Active Architecture Only 设置成 NO
  • iOS Deployment Target 设置
Build Settings
3. 编写 .framework 代码,然后进行配置
编写 .framework 代码 在 YYFrameworkKit 包含它 对外暴露头文件
4. 创建 Test项目 用于编写 Framework 时方便测试
创建 Test项目 配置 Test项目 运行 Test项目
5. 添加 Podfile 导入第三方 pod 库,pod install 安装库
Podfile 内容
6. 在 .framework 中使用第三方库
image.png
7. 合并 machO 文件
生成两种模式下的 Framework 获得 Framework
8. 创建一个 iOS 项目的 Demo 使用我们的 Framework
Demo 配置 Demo 使用
9. 完结,撒花,谢谢观看!

相关文章

网友评论

    本文标题:iOS 静态库 .a 和 .framework 介绍以及制作

    本文链接:https://www.haomeiwen.com/subject/vllumktx.html