![百度App iOS工程化实践: EasyBox破冰之旅 百度App iOS工程化实践: EasyBox破冰之旅](https://bitbucket.org/gdata02/tu07/raw/2b04ab72f1f6aaa8f80798859fb980a5a36e5851/2020/10/18/7df257b31ebc4a369ef98812d550f7c6_400.jpg)
概述
——
实践
——
破窗理论 环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉。
熵增原理 在自然情况下,一切物质都将趋向于无序。
丨仓库嵌套问题
由于历史遗留原因,我们在拆仓库的初期选择了在组件原有位置创建仓库,最初设计上考虑不周给我们带来了不小的麻烦,不同分支的gitignore的不同会引起文件追踪状态的错乱,后来便采用将源码仓库进行平铺,以避免这个问题。
"立法" 要远比 "道德规范" 来的直接有效。
丨force_load问题
如果App兼容iOS8的话,苹果对于主包二进制有大小限制,这时可以将底层Layer改为动态库来减少主包二进制体积,此时一些C/C++的组件如果出现跨层调用时是需要force_load的,实际应用过程中应尽可能地使用OC封装这些库而避免上层业务直接使用这些组件,尽可能的少使用force_load,从而避免包体积增大。
丨二进制失效问题
二进制化对组件接口层的稳定是有很强的要求的,组件接口层应当尽可能稳定,尤其注意宏/枚举等声明改动引起其他组件二进制失效问题,接口层尽可能采用增量扩展的形式(旧接口标记废弃)。此时建设监测机制确保版本号的正确性就显得尤为重要,我们通过Clang插件来完成对API变动的监控,在组件发布之前进行校验。
二进制包由集群编译打包,本地开发时使用二进制文件,工程根据配置自动导入源码完成源码映射,源码不参与编译,但断点调试依然有效。
丨其他方案
翻阅LLVM文档可以查到另外一些关于源码映射的资料:
1. 在运行阶段,可以借助lldb的source-map来修改源文件所处的位置,显然使用起来很不方便。
2. 动态链接库可以通过配置plist文件来完成源码映射,但在实际应用中,动态库会严重影响启动速度和包体积,通常各个组件均以静态库存在,故也未采用此方案。
理念
——
对比业界
——
未来
——
结语
——
参考资料
——
推荐↓↓↓
长
按
关
注
👉【16个技术公众号】都在这里!
涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。