iOS静态库的编译
来源:互联网 发布:知乎论坛网站彭加木 编辑:程序博客网 时间:2024/04/29 01:42
在做第三方的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文件
- - (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];
- }
结果
但是有人会觉得这个太麻烦,果断的将这两个静态库打包成一个静态库使用命令
lipo -create Debug-iphoneos/libJSONKitLib.a Debug-iphonesimulator/libJSONKitLib.a -output libJSONKitTestLib.a
方法好虽好,但会牺牲空间,文件会变大,JSONKit源文件12KB + 177KB,编译成静态库后arm架构的511KB i386架构的263KB,把它们打包成一个静态库是774KB;
- iOS静态库的编译
- iOS静态库的编译
- iOS静态库的编译
- iOS静态库的编译
- iOS静态库的编译
- ios 编译静态库
- ios 编译静态库
- IOS编译静态库的心得
- iOS SDL2静态库的编译
- iOS SDL2静态库的编译
- iOS 编译包含 bitcode 的 opencore-amr-iOS 静态库
- ios 静态库编译总结
- ios静态库加快编译
- Mac_XCode编译ios静态库
- iOS静态库的编译和lipo命令的使用
- iOS静态库的编译和lipo命令的使用
- 编译iOS上可用的sqlite3静态库
- ios上关于编译MP4v2静态库的问题
- perl 把源目录下的文件拷贝到目标目录(带路径)
- Linux 3.6 配置S3C2416支持模拟U盘
- nginx性能改进一例
- D. Do it Right!(2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest )
- android 自定义textview属性配置
- iOS静态库的编译
- 常用默认端口号
- 第十二周项目1阅读全局变量
- LeetCode——Longest Common Prefix
- logj配置详解
- nginx折腾记(HTTP性能能测试,与Apache对比)
- ValueError: can't find recovery API version in input target-files
- hive常用参数
- 浅析NSTextContainer