原文地址:
1.查看framework的支持指令集:
$ lipo -info MyFramework
查询结果:
......
......
Architectures in the fat file: MyFramework are: armv7 arm64
2.合并framework:
$ lipo -create MyFrameworkArm.framework/MyFramework MyFrameworkx86.framework/MyFramework -output MyFramework
用输出的MyFramework替换MyFrameworkArm.framework或者MyFrameworkx86.framework的MyFramework即可。
笔记:
静态库和动态库
.a / .dylib / .tbd
库就是一段编译好的二进制代码,两种情况用到库,一是不希望别人看到源码,只暴露头文件;二是不会进行大改动的代码,节省编译时间。
平时用的第三方SDK基本上都是静态库,编译时会拷贝一份编译到目标程序,所以二进制文件会变大;使用时,需要手动导入静态库所依赖的其他类库;导入静态库可以减少对外界的依赖,如果导入的是第三方动态库,动态库找不到的话会崩掉;静态库可以减少耦合性,静态库不可以包含其他静态库,保证每一个静态库都是独立的,不会重复引用。
使用频率最高的UIKit.framework Foundation.framework都属于动态库,所有的.dylib / .tbd结尾的都属于动态库。平时使用的系统库都放在IOS系统中,打包应用程序时不会拷贝到程序中,当使用时才会动态从iOS系统中加载,因此动态库也被称为共享库;这些库是所有应用公用的,节省了安装包的体积;动态库制作的时候可以直接包含静态库,也能自动link所需要的依赖库;使用动态库不需要再次link依赖库。注意:导入自己制作的动态库时,需要在Embedded Binaries中导入,不然会报错:image not found,此时这个动态库会跟静态库一样被拷贝到目标程序中进行编译???
Framework,主要由Headers、binary文件、bundle构成,还有记录版本信息的info.plist和Modules。binary是编译成的二进制文件,注意:依赖库需要重新link。
.a静态库,还需要提供头文件,比Framework麻烦。
.dylib/.tbd动态库,基本上由系统提供。