其他
干货 | 携程旅行App iOS工程编译优化实践
作者简介
天超,携程资深软件工程师,关注iOS研发,喜欢用脚本语言解决各种难题。
引言
一、背景
二、优化方案
2.1 工程组件化
2.2 增量编译
打包任务会根据新的 commitId 下载一份代码副本,不能直接使用该副本,因为代码文件内容没有变动,仅仅是文件属性的变动也会导致 xcodebuild 缓存不生效。因此需要副本和工作区内的源码做diff,仅仅合并内容有变动的文件。 使用 python 的 filecmp 实现合并代码逻辑,并且支持配置 ignore。 xcodebuild 指定 -derivedDataPath 设置缓存路径,并将该目录配置到 diff ignore中。
xcodebuild的缓存有时候会出问题,比如修改了c++文件后有时并不会生效,这种需要提供清除缓存的功能,可以由开发自由选择使用。
2.3 Bundle细分
加快本地开发编译:某个功能的开发人员只需要将自己这个功能模块切为源码,其他模块全用静态库,提高本地开发编译效率。 为其他独立app提供更细粒度的模块功能支持:我厂的很多独立App都是共用一套框架和基础组件的,按功能模块细粒度的拆分出独立的模块Bundle后,可以使独立app在选择基础组件时按需选择。
2.4 合理设置头文件搜索路径
2.5 建立中央缓存
本地开发:该模式下,开发可以自由选择更新最新Bundle和仅更新配置,缓存使用不频繁。所以将同一Bundle版本个数调低,缓存有效期拉长。 持续集成:发布平台打包较为频繁,缓存使用比较频繁,并且Bundle版本变动较快,所以将同一Bundle个数调高,缓存过期时间设置为一天。
三、存在的问题和思考
【推荐阅读】
“携程技术”公众号后台回复“新书”,
可免费获得两本书的试读样章~
《携程架构实践》
京东
当当
《携程人工智能实践》
京东
当当
“携程技术”公众号
分享,交流,成长