码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 静态库制作及使用问题

时间:2015-07-24 00:01:30      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:ios 静态库 .a文件 文件封装

参考:http://blog.163.com/const_yixinyiyi/blog/static/180088172201211113333882/
静态库使用目标:(.a )
> 自己制作一个静态库(可以使用)(前三步)
> 制作模拟器版本和真机版本 (第四步)
> 合并两个版本 (第六步)


创建静态库步骤:
1. 选择要创建的文件类型:Cocoa Touch Static Library (.a文件)


2.将需要封装的文件导入其中
选择工程找到target(静态库) -> Build Phases -> Compile Sources中添加需要封装的类


3. 设置编译配置
编译EditSchem->选择Run,选择info,设置其Build Configuration :release/debug
选择工程:Project->Build Setting -> Code Signing -> Code Signing Identity 选择其与上面相对应的,release或是debug,设置其为iOS Developer 【注意开始选的是Project不是Targets】


4. 选择project->iOS Device,点击运行后会生成arm6,arm7静态库,【注:此时生成的静态库是适用于真机上的,并不适合用在模拟器】如果需要生成i386的静态库【模拟器用】可以通过选择模拟器再运行一次,【不能用showInFinder打开,不然只是针对真机的】即可在相应DerivedData中相应工程的Build -> Products Debug-iphonesimulator中找到相应的静态库文件。


小技巧:可通过命令 lipo -inof 路径/文件名.a    查看文件是否具备arm 或是 i386的条件


5. 编译成功后便可使用

注:Debug版本与release版本区别在于调试版本与发布版本,深度区别在于其动态库的使用。其都是有相应的模拟器与真机模式的静态库文件。


可能出现的问题:undefine symbols for architecture i386
问题解析: 用错了编译出来的.a lib,在模拟器里面,我们需要的是基于i386架构编译的static lib,但是这个a文件,编译出来其实是arm6 arm7架构的。因为我们使用show in finder指向的是一个ios device的库,并不是i386模拟器下的库,如果想要编译i386的库,就需要注意第4点操作,然后去DerivedData中找到iphonessimulator中的static lib
其实我们打开到Products Debug文件就可以看到里面有两个文件夹:
Release-iphoneos 或Debug-iphoneos :里面的是基于arm6 arm7编译出来的库文件。
Release-iphonesimulator:里面是基于i386编译出来的文件。




6. 将模拟器支持的版本和真机支持的版本合并到一起
lipo -create 路径/模拟器版本.a 路径/真机版本.a -output 想放的路径/静态库名称.a


打包后可查看其支持哪个版本:
lipo -info 路径/合并后的静态库名称.a


结果展示:
li****:Desktop mac$ lipo -info libdemo.a 

Architectures in the fat file: libdemo.a are: armv7 i386 arm64 



版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 静态库制作及使用问题

标签:ios 静态库 .a文件 文件封装

原文地址:http://blog.csdn.net/linfengwenyou/article/details/47029173

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!