本人介绍
我是来自运营开发部的张继明。一年的工作转瞬将成为历史,回顾2023年,我倍感充实,收获良多,作为一名年轻员工,紧密配合公司领导安排,铆足精神、踏踏实实做事,于此同时,也努力成为一名能吃苦耐劳、敢于技术攻关的员工,为公司集团发展贡献自己的一份力量。
岗位职责
开发和维护公司的iOS应用程序。
优化现有iOS应用的性能和用户体验。
跟踪新技术和趋势,能够应用新技术提升质量和体验。
工作成果
H5 / Web
为解决iOS和安卓经常不一致的问题,我尝试采用H5实现,从创建H5项目,到定制打包脚本,再到TypeScript封装Bridge-API,从0到1,一步步把所有前期铺垫全部完成,其他客户端同事可以照猫画虎地开发其他H5页面。
目前换电APP已经内嵌了15个H5页面. (卡券3个,订单6个,退租1个,新退租3个,订单详情1个,推广1个) 其中有11个由我创建和维护。
采用H5后,开发效率高了很多,即使客户端有人离职(仅3人),进度也丝毫不受影响,而且还有余力支援维修APP(使用小程序开发)
据统计,采用H5后,成本只有之前的 三分之一。
这里解释一下差距大的原因:
人日中包含人数,原生开发分为iOS 和 安卓,至少要2个人力,H5仅需1个人力,人力2倍差距。人力越多,功能统一成本,沟通成本等都会上升(也会占用人天)。
编译型静态语言(Swift)在编写效率、调试效率方面 均不如动态脚本语言(javascript),语言效率有1.5~2倍差距。
原生开发没有类似 React / Vue那种“杀手级”框架,API/库都相对原始,框架辅助方面存在1.5~2倍差距。
下单续租,尤其是下单,更新频率较高,判断条件复杂。 版本迭代越多,条件越复杂,累积的差距就越大。
开发电池柜模拟器,方便整个部门的开发调试和测试
为了解决 旧版电柜模拟器 不能在MacOS上运行,且体验不好的问题,我学习桌面开发技术(Electron),并使用它开发了跨平台版本的电柜模拟器。
新模拟器不但跨平台,而且功能丰富,支持多环境配置,修改的配置数据都自动保存,交互也方便直观,反馈不错。目前几乎所有的开发和测试同事都在使用。
模拟器支持自动更新,为满足业务需要,一直保持着较高频率的更新:比如 增加型号检查,电量编辑,空调上报,自定义警报,电芯数目等,几乎每个月都有新版本发布。
自动更新,可以有效保证所有用户使用相同的版本,即使高频更新,也不会产生混乱。
iOS
一.持续重构
之前每个页面都是“魔法数字”创建的,控件的长宽、位置、偏移全用数字,很难阅读,也很难修改,容易出错。经过小范围不间断地重构,“数字化”页面 现在已经很少了(约3、5个)。
代码警告数目 从 3290 降到 1359 。
二.清理冗余
移除三方库(16个)
它们是:SwiftyFitsize,Hue,Schedule,SwiftDate,RxTheme,RxAnimated,Moya-ObjectMapper/RxSwift,RxUIAlert,SkyFloatingLabelTextField,TextFieldEffects,DynamicButton,TransitionButton,Hero,ActiveLabel,HGCircularSlider,Material
作用:
减小APP体积,加快APP启动,提升用户体验。
使代码更容易维护。
这些库用到的很少,完全可以使用内建方式实现,引入三方库,反而让人看不懂,还要学习三方库,费时费力。
三.编码约定
为了让iOS新同事避免沿用以前的不良写法,主动推进和输出了iOS编码规范,以保证团队的代码统一性,文档链接:
https://ipadnexsg1.feishu.cn/wiki/EKS5wqUF2iQNblkuRrYcZ6vPnhh
文档详细指出了原有APP中不合理的地方,以及推荐的写法,为iOS新同事提供参考。从此,iOS同事统一思路,都开始用RxSwift封装Service层方法,来取代原来被滥用的协议和扩展。
Hybird 混合
设计并实现多达40个JS-API,涵盖 网络请求,窗口导航,事件通信,数据存储等很多方面。
为方便前端同事,撰写了详细的JS-API文档:https://www.jvlian.cn/docs/1
为方便安卓和前端同事,特地制作API测试页:https://jvlian.cn/static/bridge/ds.html
常给客户端同事讲解API使用方法,也帮前端同事解决H5内嵌问题,次数多了,我就把积累的问题和经验汇总起来,通过分享会共享给大家,为照顾没有参会的同学,会后整理成了文档:Hybird常见问题&解决方法:https://www.jvlian.cn/docs/4
离线更新包
为解决客户端APP发版问题,比如 审核时间长,被拒,用户使用的版本低 等等,设计并实现了APP 热更新机制,为保证安卓和iOS思路一致,撰写了思路文档:https://www.jvlian.cn/docs/3
同时,做为前台的配套设施,又开发了相应的后台管理页面:
自从有了热更机制,开发过程也变得高效了,因为不用打包,就能修复bug,测试同学不用下载新包,就能验证结果。
近期的“多套餐”需求 就是通过这个离线更新包 完成线上发布的。
实践后端技能
发现团队的后端同事工作繁忙,人手不足,我开始学习后端开发知识,希望能参与后端开发。
在语雀和飞书付费之前,分享文档受限,我就用自学的后端知识 开发了个人文档站点,当前端同事打不开链接时,我就发给他个人文档链接。
个人文档站点:https://www.jvlian.cn ,使用MariaDB数据库存储文档内容,使用Redis缓存系统减少重复计算。
我自认为是“跨界”的示范,可以带动更多人走出舒适区,尝试其他领域。(据我所知,有很多前端同事都有意向、也有能力做后端开发(Node.js),所以不用太担心维护问题。)
24年工作计划
- 新型API「透明浏览器层」已经设计出来,且验证完毕,正准备线上验证。线上验证完毕后,就逐步把下单、续租、取电、换电、暂存等动作的前置检查逻辑 转换为可以热更新的形式。
新设计的好处:
目前由于检查逻辑较多,导致两端有些地方不一致,改完后,iOS、安卓将使用同一份用H5实现的检查逻辑,差异就会消失,从而提升APP的质量。
统一后,原来两人的工作量将变成一人,节约一倍的人力。
后续维护阶段,开发效率将会是统一前的2倍,节约一倍的开发时间。
配合热更新机制,无需经过商店审核,就能改变APP功能,节省接口兼容性相关的开发成本。(前置检查逻辑较多,且更新频繁。若没有热更机制,发版成本和兼容成本会很高)。
- 目前换电APP iOS端还有几处前人遗留的纠缠不清的代码块,需要整理和划分成职责更明确的功能子模块,大约包括 订单模块,柜子模块,换电流程模块,网点与经销商模块,地图模块,活动模块。 做完这些,能显著提高代码的可维护性,以后再修改时就能更快,且更不易出错。
自我评价
- 2023年,我学习并实践了很多新语言新方法,Swift常用库,RxSwift响应式方法,MVVM规则,Reactor思路等等,这些方法有效提高了开发效率,提升了软件的质量。
- 我不满足于iOS,在H5/Web领域 努力学习实践,基本掌握了Web开发所需的全部技能。
- 在和客户端同事沟通API,以及和前端同事沟通内嵌Web的过程中,我更深入地了解了两类技术栈同事的思路与工作方法,同此,也提高了自己的沟通能力。
- 我将坚持 持续学习,不断进步,不断学习新的知识与技能。