香克斯


  • Home

  • Tags

  • Categories

  • Archives

iOS App Launch Optimization

Posted on 2021-06-10 | In iOS

引言

本文首发于携程技术公众号 干货 | Trip.com APP 启动优化实践
本文是个人对启动的一点总结,细节不会披露太多,如需了解更多可私信。

App启动是用户对我们 Trip.com App的第一印象,对于用户体验尤为重要,所以我们花了很多时间在启动时间的优化上。
下面我们会先分析App启动的过程,在了解启动流程的基础上制定大的优化原则和小的具体方案,希望对大家有所帮助。

Read more »

iOS App Size Optimization

Posted on 2021-03-19 | In iOS

背景

通过一份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,解压开就能看到包的构成。

  • 二进制代码
  • 资源bundle - 独立bundle管理 .bundle格式
  • Frameworks - 动态库,12.2以下可能会包含swift动态库,12.2及以上则只要依赖的动态库
  • Plugins - 如果App有Extension等功能,则会有这部分
  • 翻译 - 可能是在main bundle中,也可能是在独立bundle中,以strings文件呈现
  • 散落在main bundle的各种其他资源(没有用独立bundle管理)

通过这里可以看出,按照类型分,包的组成大致是以下几类:

  • 代码 - 二进制+Pluigns中的代码+Frameworks中的动态库
  • 资源:图片/json/db/mp3等等资源
  • 翻译:strings文件(其实可以算资源一种,单独列出来是因为我们的这部分比较大)
Read more »

Crash学习笔记

Posted on 2020-11-15 | In iOS

Crash是什么

Crash其实就是当有些操作不被系统或者软件允许时,通过一些信号或者异常让进程中止的现象。当然,在收到信号或者异常时,也可以选择不处理让进程继续运行,但是一般不会这样做,因为后可能导致一些不可预知的后果。在OSX&iOS中,Crash一般由以下两种信号产生。

Read more »

LLVM-Driver笔记

Posted on 2020-07-14 | In LLVM

什么是Driver

在单独编译文件时,我们经常会使用到如下的一些命令

1
clang -ccc-print-phases main.m

这里我们使用的’clang’其实不是我们通常所说的llvm的编译前端clang,而是一个命令行工具,指的就是Clang Driver,它是一个驱动,是面向用户提供接口,内部解析参数,调用编译的中的工具完成编译的过程。

Read more »

闲话iOS探索测试实现

Posted on 2020-05-16 | In iOS

背景

App中经常会有crash,为了治理crash,我们尝试了各自手段,包括提交代码前的静态检测,单元测试等,但是还是会有crash被带到线上,而一旦上线,所带来的影响和修复成本都是很大的。借鉴我们组Android同事的想法,有目的有策略地对App自动化的探索(类似于智能的Monkey),探索到的页面越多,发现问题的可能性越大。将问题收集提前报出来,就可以避免带到线上。

本章我们对探索的策略不作细说,只聊聊探索在iOS的实现的大概流程。

Read more »

iOS进程间通信

Posted on 2019-12-29 | In iOS

主旨

本章主要介绍Google在开源项目EarlGrey中用到的进程间通信的方式eDistantObject的实现原理。

背景

在做自动化探索测试的过程中,发现Apple提供的UI测试(黑盒),对App元素的操作有点局限,获取的信息也不能完全满足要求,所以想到是否可以通过在被测试App内部获取和操作元素(白盒),然后在另一个App(测试App)中进行全流程控制,达到兼具白盒和黑盒的效果。

既然能在测试App内部操作,为什么还一定需要一个测试App来控制?因为在App内部没法完成所以自动化测试的公共,比如系统Alert的处理。这个不是本章重点,不赘述。

那么问题来了,抛开Apple的UI测试,我们怎么才能在测试App中和被测试App进行通信,这里就需要有一种通信方式来在完成App间的数据沟通。下面我们介绍下eDistantObject的大致原理和实现。

Read more »

iOS增量代码覆盖率

Posted on 2019-12-07 | In iOS

什么是增量覆盖率

增量覆盖率,顾名思义,指的是每次代码改动的增量部分,开发自测的覆盖程度。

为什么需要增量覆盖率

大型项目为了持续保证代码和App的质量,需要对新引入代码进行审查,而在代码被合并进去之前(比如在code review阶段),增量覆盖率无疑是衡量开发对代码的自测重复程度的一个很好的指标。

代码覆盖率不是万能的,只能通过这个手段解决一部分明显通过自测就可以发现的问题。

增量代码覆盖率更偏向于开发使用,保证开发自测的充分程度。

Read more »

浅析.framework的生成

Posted on 2019-04-09 | In framework

起因

最近项目需要将在独立仓库生成的.framework集成进来,同时又希望是static framwork,原因是动态framework在启动时链接会消耗启动时间,这是我们不想看到的。而我们自己独立仓库使用的cocoapods管理,使用cocoapods-packager打出来的framework没有将Resources单独分开,导致带资源bundle的framework被静态链接时会被Testflight打回(正常编译没问题)。
所以我们要做的就是将cocoapods-packager生成的static framework中资源剥离开单独在Build Phases中设置。当然,从生成framwork,到剥离Resources,再到集成项目设置都是在我们CI中自动化实现。

Read more »

记一次ReactNative的多线程crash

Posted on 2019-02-18 | In Crash

背景

在使用ReactNative v0.51版本时,发现线上有个崩溃一直没有解决,为了完成App治理crash的目标,所以花了点时间研究如何解决这个问题。

Read more »

ReactNative源码分析-通信机制(基于iOS)

Posted on 2019-01-10 | In ReactNative

准备-JavaScriptCore

在开篇,我们先简单准备下JavaScriptCore的知识。这是整个Native和JS沟通的最底层的桥梁。

Read more »

shanks

shanks

10 posts
5 categories
25 tags
RSS
© 2021 shanks
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4