1. 静态库工程建立

    打开xcode --> 新建工程  --> 选择工程类型为library  --> 确定

    

  2.工程配置  

     点击工程中-->ios device(选择edit scheme) --> 点击info  --> run (选择release 或者debug)--> ok

    target --> building setting --> archciture  active only  设置为no

    编译运行--> xcode 的product 中点击菜单--> show in finder 找到编译的静态库。


  3. 注意事项

    静态库一般分为模拟器和真机两种 

    模拟器是i386架构,真机是你当前打包时候使用的手机的架构

    iPhone 手机cpu 架构类型

    armv6 :iphone iphone2 iphone3G

    armv7 :iphone3Gs  iphone4   iphone4s 

    armv7s :iphone5 iphone5c

    arm64 :iphone5s iphone6 iphone6p iphone6s iphone6sp

    4.查看lib库的信息    

    命令是:lipo -info libPrint.a,可以看到显示的结果是:Arch是  Arm7。下面我会具体介绍一下。

    5.有时候可以看到undefine symbols for architecture i386这样的错误。

其实这个错误原因很简单,就是因为,我们用错了编译出来的xxx.a lib;在模拟器里面,我们需要的是基于i386构架编译的static lib,但是这个a文件,大家还记得前面说的arm6 arm7构架的么。这个a其实是在iphone这个arm构架上运行的代码。其实show in finder指向的是一个ios device的库,并不是i386模拟器下的库。那如何编译i386的库呢?我们将这个iOS Device修改成iPhone5.0 Simulator。在进行编译,这样就可以编译出i386下面的库。这个时候我们show in finder打开的文件夹还是ios device下的库。我们最好自己去那个目录下看一下。这里我们用command去查看了一下目录情况,如下:可以看到一个iphoneos的目录和一个simulator的目录。

然后我们再看看这个目录与第4条所示的目录有什么不同! 同样也有一个libPrint.a文件。

6.lib 错误原因,

Release-iphoneos里面的是基于arm6 arm7编译出来的库文件。Release-iphonesimulator文件夹下面的是基于i386编译出来的文件。

7.合并.a文件,制作通用静态库

这二个库一个是用于真机运行的一个是用于模拟器运行的.其实我们可以利用lipo将这二个文件打包成一个通用的a文件。命令如下:

将/Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替换成你的路径。 

将/Users/user/Desktop/xxx.a替换成合并后的路径。 

lipo -create path1/真机/xxxt.a  path2/模拟器/xxx.a  -output /Users/pjk1129/Desktop/xxx.a