集成库

17 9月

开发中第三方库可以用CocoaPods来集成到项目工程中。这样可以共享代码,避免重复造轮子,还可以提高编译速度,减少代码体积。

库分静态库动态库

  • 静态库
  • 动态库

Framework是资源的打包方式,你可以创建CocoaTouch Static Library和CocoaTouch Framework。

File->New->Project:

静态库

静态库是.a后缀的文件,在编译时会将库的所有二进制文件都打包进APP工程里,会增大APP体积且不可改变。我们自己编译出来的都是静态库.a文件。

CocoaTouch Static Library就能创建.a文件的静态库。新建静态库工程后,实现业务逻辑后,点编译后,根目录下的Products目录里就能生成.a文件。

我们的静态库要给其他工程使用时可能需要使用自定义的.h头文件。可以在工程的【Build Phases】tab的【Copy Files】里加入需要打包进的.h头文件,这样在.a文件的同级的includes目录里才会出现自定义的.h头文件。

工程中要使用这个静态库非常简单,只需要将.a文件和.h头文件,Add files到工程里即可。工程里其他文件正常引入静态库:

#import "xxx.h"

唯一要注意的是:真机和模拟器的底层架构是不同的,所以要编译出两个.a文件(分别供真机线上用,模拟器开发用),通过命令行工具将两个.a文件合并成一个:

lipo -create **.a **.a -output **.a

动态库

静态库是.dylib后缀的文件,编译时只存储引用,运行时才加载到内存中,不会增大APP体积,但运行时加载会损耗性能。更重要的是:因为APP发版是要进行审核的,如果是动态库,会绕过审核,在运行时改变一些行为,会带来安全隐患,所有IOS是禁止使用动态库的,虽然这个功能存在,但使用后是无法提交并通过审核的。

IOS提供了系统级的动态库:UIKit,Foundation框架,因为几乎所有APP都会用到,没必要打包进每个APP里。

CocoaTouch Framework可以创建静态库和动态库,但创建的并不是系统级别的动态库,而是为了支持APP间共享的Embedded Framework,仍旧需要打包进整个APP中,而不像系统级的动态库不用打包进APP中完全运行时加载。

编译后在Products目录里会生成.framework文件。和静态库一样,如果要自定义.h头文件。可以在工程的【Build Phases】tab的【Headers】里Project里的头文件拖到Public下,就能被外部使用了。

工程中要使用这个动态库,先将.framework文件,Add files到工程里即可。但光这样是无法通过编译的,因为我们这个动态库不是系统级的动态库,需要手动在项目->General->Embeded Binaries里添加,即将动态库的二进制文件拷贝到项目的boundle中。

工程里其他文件正常引入动态库:

#import <xxx.h>

发表评论

电子邮件地址不会被公开。 必填项已用*标注