ios编译静态库
㈠ ios平台下live555静态库的编译及打包成.a文件
因为你执行的是./genMakefiles iphoneos ,所以得到的.a文件只支持真机环境下,同理执行./genMakefiles iphone-simulator,得到的是支持模拟器环境下的.a文件,编译结束最终得到支持真机和模拟器下的四个.a文件,如下图:
如何打包成一个静态库.a文件,请参考 http://blog.csdn.net/qq_26968709/article/details/51164104
如果需要打包好的库文件,直接下面留言。
㈡ iOS 静态库和动态库打包framework流程(纯swift版/swift、OC混编版)
选择 iOS -- Framework&Library , 点击 next
如果打包文件中使用了第三方库,建议pod管理,并告知用户使用pod安装,避免用户重复导入。跟平时开发逻辑一样,打开 .xcworkspace 工程。
操作完之后工程目录显示
把打包需要的文件添加到项目中。 如果想要这个类或类里面的方法被外面使用,需要配合pubic修饰供外面使用
由于以上获取的framework只能在对应的版本上运行(即真机只能在设备上运行模拟器版本只能在模拟器上面运行使用),所以需要合并framework版本。
合并framework版本:
sudo lipo -create (此处请填写真机AppVest文件路径) (此处填写模拟器AILLSDK文件路径) -output 自定义合成文件存储路径(合成文件的名字AILLSDK)
因为真机版本和模拟器版本的framework都存在arm64架构,导致架构重复,不出意外,会提示合并失败。如下
处理合并失败的问题
最后,将 XX.framework(真机或者模拟器framework都可)文件夹 拷贝出来,替换AILLSDK(本文使用的)为刚才合并的新文件。
查看替换后的framework支持全部真机模拟器架构。
我在合并binary文件之后,仅拷贝出 Release-iphoneos 文件夹下的 XXX.framework ,并替换掉AILLSDK二进制文件。导入项目中使用模拟器运行,报错,显示找不到架构。
解决方案
拷贝所有的moles到
再替换掉AILLSDK二进制文件,导入项目,如果framework中内含第三方库,需要在所在的工程中使用pod加载,否则会提示编译失败。
至此,编译成功。🎉🎉🎉🎉🎉
不管是在framework封装的内部,内部swift类调用内部的OC类,还是内部的OC类使用内部的swift类,还是外部工程swift类使用framework内部OC类,还是外部工程OC类使用framework内部swift类。原理是一致的,以下来介绍下:
在 AILLSDK.h(你自己创建framework时候生成的.h文件) 中添加import导入
#import <AILLSDK/OC类名.h>
在oc的 .m 或 .h 文件中,导入 #import <AILLSDK/AILLSDK-Swift.h> , 也就是 你自己framework名-Swift.h
㈢ ios未使用的.a如何编译进app
新建一个iOS的空项目:这个非常的简单就不说了,然后建立一个要使用的库文件:
然后添加一个静态库的工程,这个工程就是你静态库函数,你可以在里面写任何你需要的函数:
现在如果你要编译原来的TestUseLib工程的时候是编译不过去的,你需要添加的地方有几个:图片文件上传不了描述一下:
选择工告谨程文件(不是库文件)在targets下选择工程的一个target
然后在Build Phases列中设置:Target Dependencies加上那个库工程,以及在
Link Binary with Libraries加上那个库工程的库文件(.lib)
同时设置.h文件路径:
在build Setting列中的Search Paths下的header Search Paths加上头文件的查找路径:
你可以写绝对路径,但是这样袜槐基不好,只能在自己的机器上运行,到别人的机器上去了就会有问题:
$(SRCROOT)这个东西表示工程的根路径,其实也就是你在建立工程的时候选择的那个路径。明滚
这就是静态库的使用。
如果你现在需要引用别人的一个.a库,那就更加简单了,你只需要将.a文件和.h文件放到你的工程目录下,然后将.a文件与.h文件拖动到xcode的工程中就可以了。