最近公司要求写SDK,我就想把它弄成静态库的方式
我的理解:所谓静态库,就是把所有的.m文件打包成一个.a文件,这样使分享代码的时候更加简洁,重要的是别人也不会看到你.m文件中的傻B代码了
环境是Xcode6.2 iOS8.2
首先,创建一个静态库项目
删掉Xcode自动创建的同名文件,然后导入你需要做成静态库的文件
在这里我导入一个简单的输出字符串的文件
然后选择运行的设备进行编译,这里我有不理解的地方:在Xcode6.2中,当我首先选择模拟器,然后编译文件的时候,.a文件依然是红色的,说明静态库没有生成,但是当我把运行设备改成iOS Device之后,.a文件就变成黑色了,这是为什么?
编译结果
在.a文件上右键,选择在文件夹中显示
可以看到文件夹中的.a文件
这是在用真机调试的时候需要导入的静态库,这时候神奇的事情又来了,在Debug-iPhoneos文件夹的下面有一个Debug-iphonesimulator文件夹,打开之后,里面也有一个静态库文件
这里的.a文件是用模拟器调试的时候用的
这连个.a文件用于不同的调试设备,当你用错的时候,Xcode会报错
调试的时候,两个静态库切换会很麻烦,而且给别人使用也不方便,这里可以把两个.a文件打包成一个.a文件
打包方式:
这是截取别人的博客,我自己的路径太长,博客地址,http://www.cnblogs.com/qingjoin/archive/2013/01/31/2886985.html
总之,生成的.a文件对于模拟器和真机都是适用的
然后,这里有一个查看.a文件支持模拟器还是真机的方法:
在终端输入
这里的x86_64指该静态库支持模拟器,如果是arm7或arm8,那么该静态库就是支持真机调试的
我们用终端合成的.a是会同时显示出来x86_64,arm7和arm8的
以上说的都是在Xcode6.2环境下,生成的调试用静态库,因为静态库所在的文件夹是以Debug开头的,我在看教程的时候看到过以release开头的,这个应该是用来发布程序用的静态库,这个我还不是很清楚他们的区别
2015-9-9日更新!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
今天又打包了一个静态库,并且做了合并,在使用的时候报错
我查看了静态库信息,支持的是
Architectures in the fat file: /Users/chebao/Desktop/i386+arm/libTestCocoapodsWithAFN.a are: armv7 i386 arm64
这个静态库的模拟器部分是用iPhone4s打包的,这里的i386可能指的是4s的处理器,不支持64位
当我用5s的模拟器打包的时候,静态信息是
Architectures in the fat file: /Users/chebao/Desktop/64+arm/libTestCocoapodsWithAFN.a are: armv7 x86_64 arm64
然后在项目中运行就没有问题了