IOS静态库制作和使用 Xcode11

最近公司又开始与其它公司合作开发了,所以经常需要把核心功能共享给合作伙伴。为了保密我们使用库的形式提供。一些东西还是要记录一下,一段时间不用一些细节又忘了,真是好记性不如烂笔头啊。。这里简单记录一下。

1.什么是库?

库是程序代码的集合,是共享程序代码的一种方式

2.库的类型?

根据源代码的公开情况,库可以分为2种类型
开源库
    公开源代码,能看到具体实现
    如SDWebImage, AFNetworking
闭源库
    不公开源代码,是经过编译后的二进制文件,看不到具体实现
    主要分为: 静态库,动态库

3.静态库和动态库的存在形式上的区别

静态库
    .a
    .framework
动态库
    .dylib
        在Xcode 8里面,看到后缀为.tbd的库,它的本质都是.dylib文件
    .framework

4.静态库和动态库在使用上的区别

静态库
    链接时,静态库会被完整的复制到可执行文件中,被多次使用就有多份冗余拷贝
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191025152338303.png)  
动态库
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191025152326674.png)
    链接时不复制,程序运行时由系统动态的加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

5.iOS 设备的CPU架构

模拟器:
4s-5: i386
5s-7 Plus: x86_64

真机(iOS设备):
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)
arm64: iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3

5.打包.a静态库(使用Xcode11)

1.new -> project 选择Static Library
IOS静态库制作和使用 Xcode11_第1张图片
2输入静态包名称,选择语言,这里我使用oc讲解
IOS静态库制作和使用 Xcode11_第2张图片
3.设置支持的系统版本
IOS静态库制作和使用 Xcode11_第3张图片
StaticLib.h

#import 

@interface StaticLib : NSObject
    + (NSInteger)sumNum1:(NSInteger)num1 num2:(NSInteger)num2;
@end

StaticLib.m

#import "StaticLib.h"

@implementation StaticLib
+ (NSInteger)sumNum1:(NSInteger)num1 num2:(NSInteger)num2
{
    return num1 + num2;
}
@end

4.暴露给外部调用的接口头文件添加到这里
IOS静态库制作和使用 Xcode11_第4张图片

5.选择一台模拟器(默认只支持的这里选择的模拟器架构),Common + B 编译一下,编译通过会是黑色字体的libStaticLib.a文件(编译不通过字体红色的),
IOS静态库制作和使用 Xcode11_第5张图片

6.右键Show in Finder 查看
IOS静态库制作和使用 Xcode11_第6张图片
7.终端查看静态库所支持的架构
终端->cd进入库文件路径->lipo -info 库名
在这里插入图片描述
8.设置适配所有模拟器架构
选择一台模拟器,然后
project -> buildSeting -> Build Active Architecture Only 设为NO
IOS静态库制作和使用 Xcode11_第7张图片
9.再次查看支持的cpu架构
在这里插入图片描述
10.设置适配所有真机的架构
这里选择Generic Ios Device 或者连接一台真机
project -> buildSeting -> Build Active Architecture Only 设为NO
Common+B 编译
IOS静态库制作和使用 Xcode11_第8张图片
11.show in finder ,多出一个真机的静态库
IOS静态库制作和使用 Xcode11_第9张图片
12.合并两个静态库
终端命令: lipo -create 静态库1名 静态库2名 -output 新静态库名称

lipo -create Debug-iphoneos/libStaticLib.a Debug-iphonesimulator/libStaticLib.a -output libStaticLib.a

IOS静态库制作和使用 Xcode11_第10张图片

13.终端检查一下它支持哪些cpu架构
IOS静态库制作和使用 Xcode11_第11张图片

6.使用.a静态库(使用Xcode11)

新建一个IOS应用,创建一个libs文件夹,把.a库,和头文件拖进来,运行
IOS静态库制作和使用 Xcode11_第12张图片

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    NSLog(@"和:%ld", (long)[StaticLib sumNum1:12 num2:14]);
}

参考:

https://wwwcnblogs.com/mtystar/p/6082363.html
https://www.jianshu.com/p/13bf46df9387
https://www.jianshu.com/p/5eea9a56d249
https://www.jianshu.com/p/bc00e1a06489
https://www.jianshu.com/p/826c9af4323c

你可能感兴趣的:(ios-develop)