索引速度
我们打开一个项目,可以看到Xcode一直Indexing,这个就是检查索引文件,我们代码有颜色,点击能跳转,就是Xcode帮我们把代码建立了关联关系。
实际上这个过程就是在解析源码,所有的.h和.m文件,去解析每一行看.h和.m文件放在什么地方,解析完在预编译的时候,把词法分析语法分析弄清楚。
索引速度就跟xcodeporj文件大小有关,保存文件量越小,速度越快。
cocoapods有个选项,就是把每个target生成一个project文件,这样索引文件就不在一个文件里面,indexing就会快一些。
xcode有一个配置,在Build Settings搜索index
如果打开项目并不去操作它,我们就可以把这个关掉,节省编译时间。这个开关是xcode内置clang有的,llvm的clang并没有这个开关。
当我们把xcode内置clang修改成自定义的clang的时候,一定把这个开关关掉,否则会导致编译错误。
Carthage Vs Cocoapods
Carthage:引入的库需要将Xcode工程文件配置清楚,Carthage会将其打包成 xcframework(默认动态,默认组件二进制),同时需要手动copy-frameworks。 如果需要静态,可以通过控制工程文件的framework类型实现。Carthage每个阶段 都可以手动控制,对工程化的理解要求高
Cocoapods:属于傻瓜式,只要熟悉Cocoapods内置的Podfile/Podspec内置的 DSL,就能上手,不用考虑太多。所引入的库都是按照Cocoapods标准制作,会 重新生成工程配置文件,而且需通过验证,使用成本极小。
Carthage:Swift编写、功能清晰,方便串联
Cocoapods:用的多、Ruby编写、需要先生成工程文件,自己控制编译
组件二进制架构
APP依赖三方库有两个选择:源码和二进制文件。那二进制是使用App的人生成还是制作三方库的人生成?最好是使用App的人,因为有的可能需要生成二进制,有的不需要,你一下全生成了就不太方便,有的还使用源码咋办;如果在install生成的话,源码多的话它生成二进制的时间就会很长,所以生成二进制要在制作这个库的时候。- 源码要进行二进制的话,首先要导入到项目里,按
cocoapods的格式,生成工程配置文件project,调用自动化把工程编译成二进制,再把二进制推到专门保存二进制的文件中。 - 二进制一定是多架构的。
lipo用于拆分多架构的,也可以把多架构合并到一起,不推荐使用,因为你生成二进制可能后面还要再拆开,增加工作量。xcframework是Xcode支持的一个格式,在里面可以保存很多架构,支持.a.dylib.framework。