(2)点击Next给工程命名如"Library"点击Next,Xcode自动为我们创建了Library.h/.m文件以及相对应的目录结构,如图2所示:
(3)接下来我们在工程的.h和.m里面编写功能实现的代码(重在静态库的创建, 代码粗略请大家无视😄😄):
"Library.h"/** 十六进制转二进制 */+ (NSString *)getBinaryByhex:(NSString *)hex;"Library.m"+ (NSString *)getBinaryByhex:(NSString *)hex {NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] init];hexDic = [[NSMutableDictionary alloc] initWithCapacity:16];[hexDic setObject:@"0000" forKey:@"0"];[hexDic setObject:@"0001" forKey:@"1"];[hexDic setObject:@"0010" forKey:@"2"];[hexDic setObject:@"0011" forKey:@"3"];[hexDic setObject:@"0100" forKey:@"4"];[hexDic setObject:@"0101" forKey:@"5"];[hexDic setObject:@"0110" forKey:@"6"];[hexDic setObject:@"0111" forKey:@"7"];[hexDic setObject:@"1000" forKey:@"8"];[hexDic setObject:@"1001" forKey:@"9"];[hexDic setObject:@"1010" forKey:@"A"];[hexDic setObject:@"1011" forKey:@"B"];[hexDic setObject:@"1100" forKey:@"C"];[hexDic setObject:@"1101" forKey:@"D"];[hexDic setObject:@"1110" forKey:@"E"];[hexDic setObject:@"1111" forKey:@"F"];NSString *binaryString=[[NSMutableString alloc] init];for (int i=0; i<[hex length]; i++) {NSRange rage;rage.length = 1;rage.location = i;NSString *key = [hex substringWithRange:rage];binaryString = [NSString stringWithFormat:@"%@%@",binaryString,[NSString stringWithFormat:@"%@",[hexDic objectForKey:key]]];}return binaryString;}(4)编译项目生成对应的静态库.a文件(在这里注意一下细节):
②编译的过程中我们要选择"模拟器编译"和"真机编译",如图4图5所示:
(5)右击工程目录下.a文件,查看编译之后的静态库文件如图6所示, 其中文件Debug-iphoneos里面包含iPhone真机所需要的libLibrary.a静态库文件,文件Debug-iphonesimulator里面包含的时iPhone模拟器所需要的libLibrary.a静态库文件,如图7所示;
(6)分别查看打包好的模拟器与真机的静态库所支持的cpu架构:
在上面我们介绍了iPhone设备CPU的架构,在这里我们就来查看我们所打包的静态库是否符合iPhone设备包含的架构标准(提示: 如果不符合某些架构的标准,静态库运行到不同机型上回报错误),打开终端查看静态库的架构如图8所示:
我们找到原因如图9所示,下面Debug:Yes表示只编译选中模拟器对应的架构,No则为编译所有模拟器支持的cup架构(Debug的Yes状态改为No即可);
再一次Command+B 编译重复上面第(4)步的小步骤,就OK了,😄😄...
(7)合并静态库:
①为什么要合并静态库呢?
因为真机和模拟器的静态库,是不一样的,不能同时适用在真机和模拟器上,但要满足这要求的话,要对编译好的两个静态库进行合并在使用;
②合并静态库的利弊?
1)利:开发过程中既可以在真机上调试,也可以在模拟器上调试;
2)弊:如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的;
③打开终端合并静态库(终于快成功了😄😄...)如图10所示:
其中完整的命令是:复制代码 代码如下:lipo -create /Users/apple/Library/Developer/Xcode/DerivedData/Library-bmlhmlslupltsqfkcfgmgqzducdy/Build/Products/Debug-iphoneos/libLibrary.a /Users/apple/Library/Developer/Xcode/DerivedData/Library-bmlhmlslupltsqfkcfgmgqzducdy/Build/Products/Debug-iphonesimulator/libLibrary.a -output /Users/apple/Desktop/libLibrary.a;
(8)静态库的使用:
将合并好的静态库文件(.a)和头文件(.h)添加到工程里面,调用静态库,结果如下(代码粗略请大家无视...):
"ViewController.h"@interface ViewController : UIViewController@end"ViewController.m"#import "ViewController.h"#import "Library.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 十六进制转二进制NSLog(@"十六进制转二进制: %@", [Library getBinaryByhex:@"F"]);}日志打印输入结果是:
这时不管是真机还是模拟器都可以编译通过,正常运行;而使用者只能通过头文件知道我们提供的借口,却不知道实现文件中实现的细节,这有效地隐藏了自己的核心技术和机密内容;
以上就是我对iOS静态库的理解与解释,希望大家相互补充相互学习。