iOS静态库的编译

转载 2013年12月03日 21:04:27

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


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


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



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;  如果调到其他则不能编译出来静态库


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




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


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



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

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

结果



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

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



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


相关文章推荐

iOS已编译FFmpeg静态库及其头文件

  • 2016年04月29日 09:56
  • 580B
  • 下载

FFmpeg iOS 编译的静态库

  • 2015年04月29日 13:22
  • 31.42MB
  • 下载

编译ios平台的支持arm64和x86_64的通用openssl静态库

编译ios平台的支持arm64和x86_64的通用openssl静态库 对于x86_64,wiki上有这句话: x86-64 (also known as x64, x86_64 and AMD64)...

ios开发ZBar源文件编译静态库

  • 2015年05月11日 11:16
  • 1.71MB
  • 下载

编译好的ffmpeg静态库for iOS

  • 2014年11月05日 11:23
  • 15.92MB
  • 下载

iOS SDL2静态库的编译

最近接触到关于ffmpeg的项目,包含SDL2(Simple DirectMedia Layer)的使用

Mac OS X10.10_xcode6.1_ios8.1环境下,编译lame静态库libmp3lame.a,支持arm64 armv7s x86_64 i386 armv7指令集

最近升级了系统到Mac OS X 10.10 并且更新了XCode6.1和iOS 8.1 之前app用到的libmp3lame.a静态库,也要支持64位的模拟器(x86_64)和64位的真机(arm6...
  • vieri_ch
  • vieri_ch
  • 2014年10月31日 11:18
  • 13708

关于iOS静态库 编译失败总结

1、"std::ios_base::Init::~Init()", referenced from 出现这样的编译问题,是需要再加进libstdc++.dylib和libstdc++.6.dyl...

iOS开发之---静态库的编译以及相关问题的处理

最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法...

iOS开发之---静态库的编译以及相关问题的处理

最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS静态库的编译
举报原因:
原因补充:

(最多只允许输入30个字)