加入收藏 | 设为首页 | 会员中心 | 我要投稿 平凉站长网 (https://www.0933zz.com.cn/)- 图像处理、语音技术、媒体智能、运维、低代码!
当前位置: 首页 > 站长资讯 > 动态 > 正文

玩转IDEA项目结构Project Structure

发布时间:2021-01-27 10:47:11 所属栏目:动态 来源:互联网
导读:2、静态库二进制方案的探索 虽然我们已经在Ci的在应用了Ccache已经有提升近一倍的出包速度了,但是存在的问题也比较明显。 在去年的某次技术周会上,我们的大佬提出了使用二进制编译的自研任务,可以更进一步提高研发效率。得到了大佬的启发后,就一直在实践

2、静态库二进制方案的探索

虽然我们已经在Ci的在应用了Ccache已经有提升近一倍的出包速度了,但是存在的问题也比较明显。

在去年的某次技术周会上,我们的大佬提出了使用二进制编译的自研任务,可以更进一步提高研发效率。得到了大佬的启发后,就一直在实践与探索二进制之路上。

我们的项目使用 CocoaPods 来管理第三方库和私有库的依赖,对大部分项目来说应该是标配了。目前还是纯 Objective-C 的项目,有少量C++,暂没有引入 Swift。

3、 调研过的二进制组件方案

下面列出研究过的一些主流方案以及最后没有采用的原因,这些方案有各自的局限性,但是也给了我不少启发,思考过程跟最终方案一样有价值。

3.1、Carthage

Carthage可以将一部分不常变的库打包成framework,再引如到主工程,这样可以减少开发过程中的编译时间。Carthage 可以比较方便地调试源码。因为我们目前已经大规模使用 CocoaPods,转用 Carthage 来做包管理需要做大量的转换工作,变动太大,不满足我们的无侵入、无影响现有的业务,所以不考虑这个方案了。

3.2、cocoapods-packager

cocoapods-packager 可以将任意的 pod 打包成 Static Library,省去重复编译的时间,一定程度上可以加快编译时间,但是也有自身的问题:

  • 优化不彻底,只能优化第三方和私有 Pod 的编译速度,对于其他改动频繁的业务代码无能为力
  • 私有库和第三方库的后续更新很麻烦,当有源码修改后,需要重新打包上传到内部的 Git 仓库
  • 过多的二进制文件会拖慢 Git 的操作速度(目前还没部署 Git 的 LFS)
  • 难以调试源码,不共享编译缓存
  • 打包成 Static Library 过程缓慢,需要通过pod lint,各个组件间又层层嵌套依赖,在现有阶段来说,是难以实现的。

3.3、cocoapods-binary

Cocoapods-Binary(Cocoapods 官方推荐的二进制插件), 是一个即时生成二进制包并缓存,而非像 CocoaPods-Packager 仅仅针对单个私有库的。原理是通过 CocoaPods 提供的 pre_install hook 在 pod install 的 prepare 阶段拦截到当前的 pod install context,进而 fork 出一份独立的 installer 以完成将预编译源码 clone 至 Pod/_Prebuild 目录下,同时也存在几个不足之处:

  • 单私有源,无法实现服务端缓存,在没有对应二进制包版本时,pod install 后会额外去做二进制包的生成,一定程度上会影响 pod install的速度。
  • 开发者切回源码调试,二进制缓存会一并清空,需求重新编译。
  • 多个项目、不同分支的相同组件依旧无法共享
  • 只支持framework,对我们项目现状需要比较大的头文件引用方式改动。

(编辑:平凉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读