iOS 静态库的打包,网上一搜一大把,结果复合你条件的有木有?哈哈,没有!那看看我这可以不?
(我起的HelloA),如下图
之后点击next ,选一个目录点击create,可以看到如下(忘记说了,我是用的Xcode5.1)
重点看看这里
好多情况下会出现这样的问题:
Undefined symbols for architecture armv7s:
"_OBJC_CLASS_$_XXXX", referenced from:
objc-class-ref in xxxxx.a(xxxxx.o)
ld: symbol(s) not found for architecture armv7s
再说上面问题之前先来说说armv6,armv7,armv7s,arm64这个是什么呢?arm熟悉吧,是品牌做CPU的 (最先进的数据集),(v+数字)是型号
,当然型号越是靠后,代表CPU越先进,还有先进的CPU一般不会舍弃老功能的(向前兼容)。知道这个,我们在来看看上面的错误,引用自XX.a静态库的XX类不支持armv7s指令,这个地方选择了(最高)armv7,所以当你把你打包好的a文件引入到新项目中(人家是先进的arm v7s啊),就会报这个支持7s的框架,就好像你非要那iphone5的手机壳来装iphone4s,肯定会出问题的,记住要匹配。
第二步:来看看工程给我们自动生成文件HelloA.h/m 两个文件,同时还给我们自动生成了HelloATests文件夹(Xcode5.0以上,单元测试就自动生成了,可以手动删掉的,对打包没有影响)。点开Products 你会看到红色文件,其中那个a就是我们要的静态库,那如何生成,请记住再生成之前还有一件事情要做,这个事情很重要:看这里好多人这个属性没有设置
,或者不知道的设置了yes或者NO结果出现莫名奇妙的问题,这里我重点说一下:这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。而设置为no时,会编译所有的版本。你在想这句话是什么意思对吧?举个个例子,如果你打包时候设置的是YES,而你用iphone4编译出来的是armv7(你当前手机的CPU是这个数据集)版本的,那么只有是armv7手机才能运行(我有点晕了),或者之前的老数据集(如arm v6等),选择NO则编译你选择的所有版本。建议一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。 第三步:这里我们选择NO。在HelloA.h文件中声明一个函数helloWorld ,在m中实现,到这里请选择
这里建议不要连设备(也不知道谁规定的),command+b运行,看,右击a文件,看,这就是a文件和头文件,那你会问头文件是怎么来呢,我以后要加怎么加呢,看这里,在copy files地方点击+号就可以添加了。(这个a文件是真机的,如果你不选择真机,只要在运行的地方改变一下成模拟器,生成文件就是模拟器a文件,你肯可能会问,能不能同时打出来模拟器和真机的,答案是不能,不过你可以把打包出来两个a文件合并在一起,具体,大哥你狗狗啊,度娘啊)
第四步,我们来引用一下这个文件,新建一个项目如图直接把a文件和头文件拖进项目。
第五步,在viewcontroller.m,看图