iOS 开发工程师 · 北京 · 6 年经验
wenyining@example.com · 138 0000 0000 · github.com/wenyining
个人优势
- 6 年 iOS 开发经验,负责过日活 500 万的健身 App 的训练和社区模块,App Store 评分维持在 4.8
- Swift 和 SwiftUI 是主力,新功能用 SwiftUI 编写,老页面按模块逐步迁移,和 UIKit 混用时的布局与生命周期问题处理过很多
- 对体验细节较真:手势过渡、键盘避让、动态字体、深色模式和无障碍都按系统规范适配
- 性能优化做过启动、滑动和内存三项:冷启动从 1.9 秒降到 0.9 秒,长列表滑动稳定 60 帧
- 熟悉 Swift Concurrency,把回调式的网络和数据库层改为 async/await,并用 Actor 解决共享状态的数据竞争
- 做过 Widget、Live Activity 和 Apple Watch 扩展,训练数据在手表和手机之间可靠同步
- 工程化方面推动了模块化和 CI:Tuist 管理工程,单元测试和快照测试跑在每个 PR 上
- 技术栈:Swift、SwiftUI、UIKit、Combine、Swift Concurrency、Core Data、HealthKit、WidgetKit、Instruments、Tuist
工作经历
某健身科技公司 · 高级 iOS 工程师
训练业务组负责课程播放、训练记录和社区,iOS 5 人,与设计团队密切合作。
- 训练播放页:课程视频、动作计时、心率数据和语音提示需要同步。用状态机统一管理播放状态,计时基于媒体时间而不是定时器,锁屏、来电和切后台后恢复不再错位,相关差评下降约 70%
- Apple Watch 联动:手表实时采集心率并回传手机,弱连接时在手表端缓存,恢复后按时间戳合并。训练数据丢失的反馈从每周二十多条降到个位数
- Live Activity:训练进度显示在锁屏和灵动岛上,上线后训练完成率提升约 6 个百分点
- 启动优化:用 Instruments 定位启动耗时,动态库合并、首页数据预取和非必要 SDK 延迟初始化,冷启动从 1.9 秒降到 0.9 秒
- SwiftUI 迁移:训练模块 40 多个页面迁到 SwiftUI,沉淀了一套组件库和设计 Token,新页面开发时间减少约 40%
某资讯 App 公司 · iOS 开发工程师
负责信息流和详情页,iOS 团队 10 人。
- 信息流改用预排版 + 异步绘制,复杂卡片滑动从 45 帧提升到稳定 60 帧
- 详情页图文混排改用 TextKit 2,长文章内存占用下降约 40%,再没有出现过因内存被系统杀掉的问题
- 搭建崩溃自动归因脚本,按版本、系统和调用栈聚合,崩溃率从 0.2% 降到 0.06%
项目经历
训练数据同步引擎
Swift Concurrency / Core Data / CloudKit / HealthKit
- 训练记录本地优先写入 Core Data,后台同步到服务端,冲突按“最后修改 + 字段级合并”处理
- 用 Actor 封装同步队列,消除多线程写数据库导致的偶发崩溃
- 与 HealthKit 双向同步,避免同一次训练在“健康”App 里重复记录
快照测试与 CI
XCTest / SnapshotTesting / Tuist / GitHub Actions
- 为核心组件建立快照测试,覆盖深色模式、动态字体和不同屏幕尺寸
- Tuist 生成工程,消除 .xcodeproj 合并冲突;CI 上并行跑单元测试和快照测试
- 上线前的 UI 回归问题从每版五六个降到一两个