参考: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
版权声明:本文为博主原创文章,未经博主允许不得转载。