iOS静态库的编译

简介:

在做第三方的SDK的时候常会把自己的类编译成静态库,在提供给开发者使用的是好就能隐藏自己的私密信息,如私有API、APIKey等;


此处将开源的JSONKit类库编译成静态库,然后再使用我们编译好的静态库来来解析一个json文件


1.新建静态库工程,选择Framework & Library --》next ,命名JSONKitLib

1366104162_9260.png1366104386_4373.png


2.删除自动生成的JSONKitLib.h和JSONKitLib.h(因为是打包别人的类,不需要这两个文件,如果是自己制作就没必要删除了),在https://github.com/johnezang/JSONKit下载JSONKit,将JSONKit.h和JSONKit.m拷贝到这个工程之中;


3.此处要特别注意的,因为iOS模拟器是基于Mac OS平台X86架构,iOS设备都是给予ARM架构,所以给他们提供的静态库也必须对于他们的架构,幸运的是Xcode可以同时编译这两个架构的库;

编译的时候调到iOS Device ,  Product  --> Build;  如果调到其他则不能编译出来静态库

1366105436_7786.png

4.编译成功后就会出来libJSONKitLib.a,右键选中,show  in finder  ;会有Debug-iphoneos和Debug-iphonesimulator两个文件夹下的静态库,先让我们看看用lipo查看一下文件类型

1366105859_8833.png


1366106448_2935.png

一个是ARM架构的  一个是x86平台的i386架构的;如果我们要在模拟器上运行测试需要拷贝Debug-iphonesimulator下的静态库,如果需要在运行真机或是真机测试就必须是Debug-iphoneos下的静态库;


5.现在来测试刚刚编译的静态库,最好将这两库都拷贝出来,方便添加使用;新建一个xcode工程,把JSONKit.h文件添加到新建工程中,然后在把Debug-iphonesimulator下编译的静态库添加进去

1366106979_1048.png


6.此处测试代码测试使用的是国家气象局api,返回的是json文件

 

- (IBAction)TapJsonPaser:(id)sender {
    NSError *error;
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/data/101180701.html"]];
    NSData *repsponse = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
    JSONDecoder *jsonPaser = [[JSONDecoder alloc] init];
    
    NSDictionary *weatherDic = [jsonPaser objectWithData:repsponse error:&error];
    NSLog(@"解析结果:%@",weatherDic);
    [jsonPaser release];
}

结果  

 

1366107167_9627.png


但是有人会觉得这个太麻烦,果断的将这两个静态库打包成一个静态库使用命令

lipo -create Debug-iphoneos/libJSONKitLib.a Debug-iphonesimulator/libJSONKitLib.a -output libJSONKitTestLib.a

1366107639_4201.png


方法好虽好,但会牺牲空间,文件会变大,JSONKit源文件12KB + 177KB,编译成静态库后arm架构的511KB  i386架构的263KB,把它们打包成一个静态库是774KB;



     本文转自新风作浪 51CTO博客,原文链接http://blog.51cto.com/duxinfeng/1201853,如需转载请自行联系原作者





相关文章
|
缓存 中间件 Swift
优酷iOS工程插件化 -- 大量模块壳工程本地如何快速编译
业务快速发展,优酷工程已有大量模块,模块耦合严重且混乱,模块依赖是一颗“树”,甚至于一张“网” ,导致开发体验持续严重下降,如何解决本地调试效率低、不支持模拟器、模块整包依赖不一致等等痛点问题,文中进行了说明。
53974 6
|
12月前
|
Ubuntu 物联网 编译器
iOS编译openssl实践
之前建设的跨平台全链路智能语音交互系统一直只跑在Android系统(主要是Iot设备),没有iOS业务场景,最近经过不断的努力,终于要把这个能力推广到B端APP,面向B端用户,这个时候就有了iOS的述求,毕竟从能力建设之初就吹出去了,系统是跨平台的,这个时候不能掉链子。
457 0
|
编解码 Shell iOS开发
iOS音视频开发 - LAME编译
MP3编码引擎,目前在业界,转码成MP3格式的音频文件时,最常用的编码器就是LAME库。当达到320Kbit/s以上时,LAME编码出来的音频质量几乎可以和CD的音质相媲美,并且还能保证整个音频文件的体积非常小
|
开发工具 iOS开发 Perl
iOS开发 - undefined symbols for architecture x86_64,大多数都是缺少静态库,缺少静态库分下面几种
iOS开发 - undefined symbols for architecture x86_64,大多数都是缺少静态库,缺少静态库分下面几种
153 0
iOS开发 - undefined symbols for architecture x86_64,大多数都是缺少静态库,缺少静态库分下面几种
|
开发工具 Android开发 iOS开发
iOS 静态库详解与开发
库是共享程序代码的方式,一般分为静态库和动态库。
256 0
|
开发工具 iOS开发
iOS静态库之xxx.framework文件
这篇博客是结合众多作者博客的基础上进行实践和整理出来的。从整体上来看,大部分的博客在整体流程上都没什么问题,但基本在SDK合成细节的描述往往不够详细,容易造成不少的误区,被坑在里面了都不知道。针对这个问题和躺过的坑,在整理做了更细致的描述,避免再犯。
116 0
iOS静态库之xxx.framework文件
|
定位技术 开发工具 iOS开发
iOS静态库之xxx.a文件
iOS静态库之xxx.a文件
168 0
iOS静态库之xxx.a文件
|
Swift iOS开发
iOS 静态库(下)
iOS 静态库(下)
242 0
iOS 静态库(下)
|
程序员 定位技术 iOS开发
iOS 静态库(上)
iOS 静态库
138 0
iOS 静态库(上)
|
自然语言处理 前端开发 安全
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
527 0
iOS-底层原理 31:LLVM编译流程 & Clang插件开发