iOS端技术建设方案

背景

从产品层面看,为服务更多用户,满足更多用户需求不断迭代,对现有应用的架构势必会带来一定的挑战。如何在满足需求的同时,兼顾质量、稳定、体验、效率,这就需要开发侧通过技术手段做出改进和优化

目标

  • 提高产品质量
  • 快速响应需求
  • 提高开发效率
  • 提升用户体验

方案介绍

  • 移除无用资源
    -- 工具扫描
  • Asset Catalog 管理图片,PNG → HEIC
    -- 使用官方优化方案
  • 资源文件压缩
    -- 配置文件精简
    -- 图片压缩,TinyPNG
  • 资源文件远程化
    -- 自建配置服务
    -- 官方 ODR(On-Demand Resources)
  • 简单纯色图片使用 iconfont 代替
    -- 支持不同配色
    -- 矢量图
    -- 平均5个 item 大约占用 1 KB
  • 使用 lottie 代码常规 GIF,难以替换的走远程配置或使用 APNG、WebP 格式
    -- GIF 图片 → JSON
    -- 渲染更流畅,视觉效果更好

代码优化

这部分 ROI 较低,且影响面较大,一般在项目中检索范围如下:

  • 无用代码
    -- 无用类
    -- 无用方法
    -- 重复代码
    -- ABTest固化
  • 过期业务
    常见方案:
  • 工具静态扫描
  • 线上代码覆盖率检测
  • 排期业务下线需求

编译器优化

主要是通过设置 Xcode 编译配置,取得编译方面的优化收益,常见设置有:

  • GCC_OPTIMIZATION_LEVEL => Oz # 编译产物优先体积最小
  • SWIFT_OPTIMIZATION_LEVEL => Oz # 编译产物优先体积最小
  • SWIFT_COMPILATION_MODE => Whole Module # 总是全量编译以确保 swift 文件优化最大化
  • LLVM_LTO => Incremental # 编译阶段做更多的优化
  • COPY_PHASE_STRIP => YES # 编译阶段 Copy 资源或文件时,去除调试符号
  • DEPLOYMENT_POSTPROCESSING => YES # 去除符号,重置文件信息
  • STRIP_INSTALLED_PRODUCT => YES # 去除符号,搭配 DEPLOYMENT_POSTPROCESSING 使用
  • ASSETCATALOG_COMPILER_OPTIMIZATION => space # 压缩算法优先减少 Assets.car 体积

防劣化建设

  • 基于 Linkmap 和 Mach-O 文件,搭建体积检测卡口
  • 迭代版本的增量走势监控
  • 定期代码整理、优化,持续投入

APM监控

  • 应用启动时长
    -- 中位数,均值,极值
    -- 版本,机型
  • 页面加载耗时
    -- 中位数,均值,极值
    -- 版本,机型
    -- 关联业务
  • 卡顿率
    -- 中位数,均值,极值
    -- 版本,机型
    -- 关联业务
  • 内存用量
    -- 中位数,均值,极值
    -- 内存告警次数
    -- 关联业务
  • 版本,机型
  • CPU占用
    -- 中位数,均值,极值
    -- 关联业务
    -- 版本,机型
  • 网络信息
    -- 网络类型
    -- 阶段耗时,中位数,均值,极值
    -- 关联业务
    -- 版本,机型
  • 线程统计
    -- 中位数,均值,极值
    -- 关联业务
    -- 版本,机型
  • abort率
    -- 中位数,均值,极值
    -- 关联业务
    -- 版本,机型

组件化

按优先级属于重要不紧急的事项,前期需要有较多投入,一般选用 Cocoapod 配合私有仓库搭建基础结构
核心价值:

  • 原子化产品能力,组件复用性高,可以更灵活的应对需求变化
  • 极大的提升产品维护性,提高迭代效率
  • 可以提升 App 稳定性

工具链

开发侧沉淀一套工具集合,用于辅助解决各类开发问题、测试问题、产品问题等
核心价值:

  • 提升研发效率,测试效率

CI/CD

研发视角的CI/CD流程如下,目标是建设流水线化、高度自动化的高效开发交付流程


CICD

核心价值:

  • 提升研发测试效率
  • 标准化研发流程,提升产品质量,降低发布风险

代码质量

提交卡口

  • 建立代码准入的基本标准,代码风格、重复代码、编写错误等等
  • 增加自动化单测运行检测,初步排查准入代码是否影响已有业务
  • 增加包体积变化检测手段,防止包体积无限制增长
    核心价值:
  • 建立规范和标准,减少人为因素带来的理解和沟通成本
  • 增加质量检测关卡,促进代码质量提升
  • 建立代码和产物的防劣化机制,延缓工程的熵增趋势

单元测试

所谓测试驱动开发(TDD,Test Driven Development),在iOS研发角度理解,也可以理解为单元测试驱动开发(UTDD,Unit Test Driven Development),一般使用 XCTest + 开源框架实现。
核心价值:

  • 提升产品质量和稳定性
  • 减少测试资源压力
  • 提升开发人员的质量意识和程序设计能力

自动化

每次提交都会运行,用于检测代码对现有业务的影响,同时关键业务执行功能巡航,执行单测

定时任务

每天运行,运行全工程单测,生成单测报告及通知开发测试群

代码扫描

  • 可以初步排查因代码书写可能导致的野指针、内存泄露等问题
  • 可以规范开发人员编码,保证风格接近,便于阅读

代码评审

  • 千行评论数 x
  • 代码评审率 xx %

产品设计

建立可持续跟进的 design space,涵盖有字体、颜色、控件、动画、交互等,开发侧对应维护一套组件库,按照版本节奏升级和迭代,改动可追踪。

交互验收标准

  • 视觉还原度
  • 交互还原度
  • 功能完整度
  • 使用体验
表格
任务块 分解
包大小 图片压缩工具
图片远程化
iconfont
lottie
删除无效图片
图片压缩
资源OSS远程化
工程设置配置化
包体积检测工具
APP监控 POC方案
灰度&上线
工程改造 LocalHotReloading
CICD
工具链 DebugRing,集成Flex,设备信息,性能面板,功能巡检
组件化
单测
代码扫描
Swift OC->Swift
设计与规范
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,825评论 6 546
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,814评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,980评论 0 384
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 64,064评论 1 319
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,779评论 6 414
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,109评论 1 330
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,099评论 3 450
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,287评论 0 291
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,799评论 1 338
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,515评论 3 361
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,750评论 1 375
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,221评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,933评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,327评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,667评论 1 296
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,492评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,703评论 2 380

推荐阅读更多精彩内容