引言
本文首发于携程技术公众号 干货 | Trip.com APP 启动优化实践
本文是个人对启动的一点总结,细节不会披露太多,如需了解更多可私信。
App启动是用户对我们 Trip.com App的第一印象,对于用户体验尤为重要,所以我们花了很多时间在启动时间的优化上。
下面我们会先分析App启动的过程,在了解启动流程的基础上制定大的优化原则和小的具体方案,希望对大家有所帮助。
本文首发于携程技术公众号 干货 | Trip.com APP 启动优化实践
本文是个人对启动的一点总结,细节不会披露太多,如需了解更多可私信。
App启动是用户对我们 Trip.com App的第一印象,对于用户体验尤为重要,所以我们花了很多时间在启动时间的优化上。
下面我们会先分析App启动的过程,在了解启动流程的基础上制定大的优化原则和小的具体方案,希望对大家有所帮助。
通过一份Google的数据,下载大小和转换率有关系[参考]。
1 | For every 6 MB increase to an APK’s size, we see a decrease in the install conversion rate of 1%. |
要想优化包大小,了解包的构成是前提。对于iOS的App来说,直接下载ipa,解压开就能看到包的构成。
通过这里可以看出,按照类型分,包的组成大致是以下几类:
本章主要介绍Google在开源项目EarlGrey中用到的进程间通信的方式eDistantObject的实现原理。
在做自动化探索测试的过程中,发现Apple提供的UI测试(黑盒),对App元素的操作有点局限,获取的信息也不能完全满足要求,所以想到是否可以通过在被测试App内部获取和操作元素(白盒),然后在另一个App(测试App)中进行全流程控制,达到兼具白盒和黑盒的效果。
既然能在测试App内部操作,为什么还一定需要一个测试App来控制?因为在App内部没法完成所以自动化测试的公共,比如系统Alert的处理。这个不是本章重点,不赘述。
那么问题来了,抛开Apple的UI测试,我们怎么才能在测试App中和被测试App进行通信,这里就需要有一种通信方式来在完成App间的数据沟通。下面我们介绍下eDistantObject的大致原理和实现。
最近项目需要将在独立仓库生成的.framework集成进来,同时又希望是static framwork,原因是动态framework在启动时链接会消耗启动时间,这是我们不想看到的。而我们自己独立仓库使用的cocoapods管理,使用cocoapods-packager打出来的framework没有将Resources单独分开,导致带资源bundle的framework被静态链接时会被Testflight打回(正常编译没问题)。
所以我们要做的就是将cocoapods-packager生成的static framework中资源剥离开单独在Build Phases中设置。当然,从生成framwork,到剥离Resources,再到集成项目设置都是在我们CI中自动化实现。