iOS工程化「四」组件二进制开篇

470 阅读3分钟

索引速度

我们打开一个项目,可以看到Xcode一直Indexing,这个就是检查索引文件,我们代码有颜色,点击能跳转,就是Xcode帮我们把代码建立了关联关系。

image.png

实际上这个过程就是在解析源码,所有的.h.m文件,去解析每一行看.h.m文件放在什么地方,解析完在预编译的时候,把词法分析语法分析弄清楚。

索引速度就跟xcodeporj文件大小有关,保存文件量越小,速度越快。 cocoapods有个选项,就是把每个target生成一个project文件,这样索引文件就不在一个文件里面,indexing就会快一些。

xcode有一个配置,在Build Settings搜索index

image.png

如果打开项目并不去操作它,我们就可以把这个关掉,节省编译时间。这个开关是xcode内置clang有的,llvmclang并没有这个开关。 当我们把xcode内置clang修改成自定义的clang的时候,一定把这个开关关掉,否则会导致编译错误。


Carthage Vs Cocoapods

Carthage:引入的库需要将Xcode工程文件配置清楚,Carthage会将其打包成 xcframework(默认动态,默认组件二进制),同时需要手动copy-frameworks。 如果需要静态,可以通过控制工程文件的framework类型实现。Carthage每个阶段 都可以手动控制,对工程化的理解要求高

Cocoapods:属于傻瓜式,只要熟悉Cocoapods内置的Podfile/Podspec内置的 DSL,就能上手,不用考虑太多。所引入的库都是按照Cocoapods标准制作,会 重新生成工程配置文件,而且需通过验证,使用成本极小。

Carthage:Swift编写、功能清晰,方便串联 Cocoapods:用的多、Ruby编写、需要先生成工程文件,自己控制编译

组件二进制架构

image.png

  1. APP依赖三方库有两个选择:源码和二进制文件。那二进制是使用App的人生成还是制作三方库的人生成?最好是使用App的人,因为有的可能需要生成二进制,有的不需要,你一下全生成了就不太方便,有的还使用源码咋办;如果在install生成的话,源码多的话它生成二进制的时间就会很长,所以生成二进制要在制作这个库的时候。
  2. 源码要进行二进制的话,首先要导入到项目里,按cocoapods的格式,生成工程配置文件project,调用自动化把工程编译成二进制,再把二进制推到专门保存二进制的文件中。
  3. 二进制一定是多架构的。lipo用于拆分多架构的,也可以把多架构合并到一起,不推荐使用,因为你生成二进制可能后面还要再拆开,增加工作量。xcframeworkXcode支持的一个格式,在里面可以保存很多架构,支持.a .dylib .framework

image.png