1)、静态库和动态库:
后缀不一样,前者是.a,后者是.dylib;
加载方式不一样,前者在链接时被复制到可执行代码,可以存在多份,后者是运行时被加载到内存,只会存在一份;
2)、打包debug版静态库,分为给模拟器使用还是真机使用,还分为是debug版,还是release版
不同之处是:
模拟器:
-
4s~5 : i386
-
5s~6plus : x86_64
真机:
-
3gs~4s : armv7
-
5~5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上)
-
5s~6plus : arm64
Debug(调试)版本
-
含完整的符号信息,以方便调试
-
不会对代码进行优化
Release(发布)版本
-
不会包含完整的符号信息
-
的执行代码是进行过优化的
-
的大小会比Debug版本的略小
-
在执行速度方面,Release版本会更快些(但不意味着会有显著的提升)
Non-fat file: libBCPullToRefreshTableView.a is architecture: arm64
怎么解决呢?把开关变成NO,就可以了:
Architectures in the fat file: libBCPullToRefreshTableView.a are: armv7 arm64
3)、如何实现真机和模拟器两个.a结合?合并好坏:
-
好:开发过程中既可以在真机上调试,也可以在模拟器上调试
-
坏:如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的
合并产生新的静态库:
--> lipo -create Debug-iphoneos/xxx.a Debug-iphonesimulator/xxx.a -output xxx.a
4)、制作release版的静态库
跟Debug版步骤一样,只不过在编译时,改下面的选项即可
5)、制作framework版本的静态库
选择framework
编译时,默认制作成动态库,要在下面选择(因为framework默认是制作成动态库的)
合并静态库时,是选.framework文件里的libstaticlib文件
合并:
删除libstaticlib,libCalculateTool拉入libstaticlib.framework项目中,libstaticlib.framework静态库制作完成