静态库的创建和使用,制作通用静态库

news/2024/7/4 0:32:40

  如果你作为iOS开发者已经有一段时间,可能会有一套属于自己的类和工具函数,它们在你的大多数项目中被重用。重用代码的最简单方法是简单的拷贝、粘贴源文件。然而,这种方法很快就会成为维护时的噩梦。因为每个app都有自己的一份代码副本,你很难在修复bug或者升级时保证所有副本的同步。这就是静态库要拯救你的。一个静态库是若干个类,函数,定义和资源的包装,你可以将其打包并很容易的在项目之间共享。

创建静态库可能出于以下几个理由:
1.你想将一些你和你团队中的同事们经常使用的类打包并轻松的分享给周围其他人。
2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级。
3.你想将库共享给其他人,但不想让他们看到你的源代码。

一、创建静态库文件

打开Xcode, 选择File -> New -> Project。 新建工程。选择iOS -> Framework & Library -> Cocoa Touch Static Library。点击Next。创建工程,命名JXStaticLibTest

工程目录:

删除掉默认的.h, .m文件,添加自己的工具类文件

#import <Foundation/Foundation.h>

@interface testOne : NSObject
-(void)testOne;
@end
#import "testOne.h"

@implementation testOne
-(void)testOne {
    NSLog(@"testOne,,,,,,,,");
}
@end
#import <Foundation/Foundation.h>

@interface testTwo : NSObject
- (void)testTwo;
@end
#import "testTwo.h"

@implementation testTwo
- (void)testTwo {
    NSLog(@"testTwo.........");
}
@end
#ifndef Header_h
#define Header_h

#import "testOne.h"
#import "testTwo.h"

#endif /* Header_h */

把上面的工具类编译成.a静态库,实际上就是把.m文件编译成静态库,头文件.h暴露出去,否则别人拿着静态库是无法使用的,显示头文件找不到,所以需要在工程内修改配置,修改copy Files

 

二、创建通用静态库

先了解下,iOS模拟器和真机设备对应的CPU架构

模拟器:

4s-5: i386

5s-8 Plus、iPhone X、iPhone SE: 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(注:无armv64): iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、 iPhone 7 、iPhone 7 Plus、iPhone 8 、iPhone 8 Plus、iPhone X、iPhone SE、iPad Air、iPad Air2、iPad mini2、iPad mini3、iPad mini4、iPad Pro

通过xcode编译出的静态库.a文件因为支持的cpu架构不同而分为不同的版本,各个版本的.a文件不能混用,为了解决这个问题需要制作通用的静态库文件 

注意::模拟器静态库只能运行在模拟器上而真机静态库也只能运行在真机上,这样就比较麻烦,通过下面的步骤将两个静态库合成一个,这样在模拟器和真机上都能用了。 

1、模拟器静态库:使用iOS Simulators -> iPhoneX在Products目录下生成libJXStaticLibTest.a文件(文件名从红色变为黑色既为编译成功)

2、真机静态库: 使用iOS Device -> iPhone7P(测试设备)在Products目录下生成libJXStaticLibTest.a文件(文件名从红色变为黑色既为编译成功)

            

3、通过右键.a文件->show in finder 找到文件编译成功之后的两份libJXStaticLib.a,并且留着include文件夹以备用

4、使用mac下的终端命令行工具执行合并语句

lipo -create /Users/xywy/Library/Developer/Xcode/DerivedData/JXStaticLibTest-aptwdopkadecxzeivsypnsizkibi/Build/Products/Debug-iphoneos/libJXStaticLibTest.a /Users/xywy/Library/Developer/Xcode/DerivedData/JXStaticLibTest-aptwdopkadecxzeivsypnsizkibi/Build/Products/Debug-iphonesimulator/libJXStaticLibTest.a -output /Users/xywy/Desktop/libJXStaticTest.a

 解释:三个文件路径都用空格分开,/Users/xywy/Desktop/libJXStaticTest.a既为生成的通用静态库文件

 如果你不知道每个.a文件支持的系统,可以通过lipo -info命令行来查看具体信息,正好验证我们前面所操作的

如果需要将通用静态库分离成各个版本的静态库,可以参考文章 http://www.cnblogs.com/wengzilin/p/3800856.html

 

三、使用静态库

新建一个ios项目,并创建lib文件夹,将之前操作中的include文件夹和通用静态库libJXStaticTest.a文件加入,在需要的地方导入头文件,调用方法

 

这就大功告成了!!!

 

新增更全学习链接:https://www.cnblogs.com/richard-youth/p/4856841.html

转载于:https://www.cnblogs.com/jingxin1992/p/9008329.html


http://www.niftyadmin.cn/n/4557902.html

相关文章

异步/同步

异步&#xff0c;就是不按照代码顺序执行。JavaScript中是通过回调函数实现对异步任务的结果处理。

在C中几进制怎么转换。还有什么是补码

然而 最后加起来0*2的7次方1*2的6次方0*2的5次方1*2的4次方1*2的3次1*2的2次0*2的1次1*2的0次面军 93 答案补充 从最后一位开始算 N从零开始 二进制转为十进制&#xff1a;01011101从右向左用每一位上的数*2的N次方 对于 short int 而言&#xff1a;无符号数与带符号数在 0&…

SpringMVC_配置DispatcherServlet

少年易学老难成&#xff0c;一寸光阴不可轻。 XML配置 按传统方式将DispatcherServlet这样的Servlet配置在web.xml中。 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"   x…

集群就是堆机器

集群/ 分布式/ 不同。

能编辑DLL文件的进 网吧如何屏蔽关键字

上百度搜 opera 下载 它不是IE内核的 在启动的时候 翻到中间 用它 答案补充 http://www.onlinedown.net/soft/24324.htm 这里可以下载 所以不会受限制 Svhost.exe文件定位在系统的Windows/system32文件夹下 用opera浏览器 不要将所有的svchost.exe文件都清除 c:/windows/system…

double*等指针类型所占字节数 float* long* int* short* 要求用sizeof 运算符计算C++中char*

因为指针就是地址 都是4个字节 sizeof(x1));... ||| 32BIT操作系统的 的PC里 所有的指针 指针所占的字节数都是机器的位数32位的机器占32/8&#xff1d;4字节不用计算了吧cout<<"sizeof(char*)"<<sizeof(char*)<<endl <<"sizeof(short*…

Android 系统四大组件

Android 系统四大组件分别是活动&#xff08;Activity&#xff09;、服务&#xff08;Service&#xff09;、广播接收器&#xff08;Broadcast Receiver&#xff09;和内容提供器&#xff08;Content Provider&#xff09;。 活动是所有 Android 应用程序的门面&#xff0c;凡是…

怎么用C语言为文件夹添加只读属性

在C语言下使用system("attrib r h c://xxx.ext");来完成 文件应为非隐藏 注意&#xff1a;修改除隐藏外的其他属性时 path时 省略drive: 其格式如下&#xff1a;ATTRIB [R | -R] [A | -A ] [S | -S] [H | -H] [drive:][path][filename] [/S [/D]]参数说明&#xff1a…