重构后的视图架构
把逻辑从过度膨胀的视图控制器或 SwiftUI 视图中抽离出来,放进独立、可测试的组件中,针对一个正在运行的应用分阶段完成,而不是一次冒险的完整重写。
一个已经拥有真实用户和不断增长代码库的应用,面对的问题与一个仍在首次构建的应用截然不同。这正是企业通常在迪拜招聘 iOS 工程师的原因:不是为了添加下一个界面,而是为了解决那些让每个界面添加起来都比上一个更难的问题,已经庞大到无法安全改动的视图控制器或 SwiftUI 视图,没有任何自动化测试覆盖的业务逻辑,以及一次发布到 TestFlight 或 App Store 仍然依赖一个人每次都正确完成好几个手动步骤。
Apple 自己的工具反映出这项工作本身已经成为一门独立的专门学科。Xcode Cloud 是 Apple 内置于 Xcode 的持续集成与交付服务,能自动完成构建、测试和交付发布;而 XCTest,Apple 的测试框架,把单元测试、界面测试和性能测试作为成熟代码库的标准组成部分,而不是事后补充的内容。一位在迪拜真正值得聘用的 iOS 工程师,是真正在一个正式上线的应用上搭建过这类基础设施的人,因为重构架构或搭建自动化发布流水线的风险,在于可能破坏那些已经依赖应用正常运行的用户体验,这正是许多企业选择在迪拜招聘 iOS 工程师、而不是让功能团队顺带承担这部分工作的原因。
这个职位负责构建什么
有可衡量成果的工程工作,而不是面向用户的新功能。
把逻辑从过度膨胀的视图控制器或 SwiftUI 视图中抽离出来,放进独立、可测试的组件中,针对一个正在运行的应用分阶段完成,而不是一次冒险的完整重写。
围绕应用中改动最频繁或最重要的部分,建立基于 XCTest 的单元测试和界面测试,经过有意识地取舍选定,而不是为了覆盖率数字而象征性地写几个测试。
使用 Apple 自己的工具对一个真实应用进行性能分析,找出启动缓慢或卡顿的真正原因,并针对具体成因解决,而不是凭猜测做一般性优化。
一条 Xcode Cloud 或同类的流水线,能够构建、测试并将新版本推送给内部或外部的 TestFlight 测试人员,无需每次发布都手动操作。
梳理清楚代码库内部纠缠不清的依赖关系,这类工作大多数企业只有在某个团队的改动不断破坏另一个团队的界面时,才会想到在迪拜招聘 iOS 工程师来处理。
写清楚架构决策和编码规范,让整个团队日后都能遵循,而不是知识只存在于一位工程师的脑子里。
需要关注的技能
要看工程纪律的深度,而不只是功能交付能力。
| 技能或工具 | 优秀的表现是什么样 | 为什么重要 |
|---|---|---|
| 架构判断力 | 能解释一个真实决定:为什么把代码库中的某一部分保持原样,而不是重构,而不仅仅是热衷于把一切都重新架构 | 一个成熟应用并非每个部分都需要重做,不必要的改动会增加风险 |
| 实战中的 XCTest | 在真实应用上写过单元测试和界面测试,并能说明他们有意选择不覆盖的部分 | 没有针对性的测试覆盖只会浪费时间,捕捉不到真正重要的故障 |
| Xcode Cloud 或同类的 CI/CD | 真正配置过构建、测试和 TestFlight 交付流程,而不只是使用过别人搭建好的 | 一条失效的流水线,比大家都已经熟悉的手动流程更糟糕 |
| 性能分析 | 在改动代码之前,使用 Apple 自己的检测工具找出具体瓶颈 | 凭猜测做性能修复会浪费时间,还可能让应用在其他地方变慢 |
| 与功能团队沟通 | 能向未参与决策的开发人员解释清楚一次架构改动 | 团队其余成员不理解的工程工作,往往会被悄悄推翻 |
Apple 官方的 Xcode Cloud 页面描述了跨设备配置的并行测试,以及在 Xcode 内实时显示的构建状态,这两点都值得在聘用 iOS 工程师从事这类项目之前,请他们结合真实项目讲解清楚。
与我们合作的方式
当一个应用已经成熟到架构、测试和发布方面的问题清单增长速度超过团队自身能消化的速度,并希望有人常驻团队逐步处理这份清单时,选择专属 iOS 工程师。当目标更聚焦,例如某个需要拆解的具体模块,或者一条需要从零搭建的 TestFlight 流水线,交付后附文档收尾时,选择限定范围项目。当您真正需要的首先是一个直接的答案,例如代码库的问题是否严重到值得投入工程时间,或者某次动摇团队信心的发布究竟出了什么问题时,选择咨询服务。这个具体职位很少作为长期正式聘用;大多数希望长期留人的企业,一旦底层代码库状况改善,通常更适合我们的 iOS 开发工程师角色。
评估候选人
要找的是在已有用户的代码库上锻炼出的判断力,而不是从零开始的经验。
一个在线上应用上真正发生过变化的崩溃率、构建时间或测试覆盖率数字,具体报出来,而不是含糊地说做了一些整理工作。
过去某个代码库中他们有意没有触碰的地方,以及原因,往往比一长串重写清单更能说明他们的判断力。
来自真实项目的真实测试,以及他们为什么选择测试那个特定行为,而不是别的。
故障本身、它是如何暴露出来的,以及之后具体做了哪些改动,因为一条从未失效过的流水线,往往只是还没有被赋予足够多的信任。
一位值得聘用的候选人,能用普通语言向产品经理讲清楚改动了什么、为什么,而不只是用只有另一位工程师才能听懂的 Swift 术语。
认证
Apple 目前提供的认证都不是为考核这方面工作而设计的。
App Development with Swift,Apple 的教育类认证,面向按照 Apple 自有课程学习的学生,与重构一个线上代码库、决定测试什么,或在真实压力下运行一条发布流水线毫无关系,因此它回答的是与您在迪拜招聘 iOS 工程师时实际要解决的问题不同的另一个问题。
他们真正推动过的一个数字、一个您可以打开并提问的测试套件,以及对一次发布出岔子及后续改动的坦诚说明,加在一起能告诉您这个人是否能胜任这份工作,而这是任何证书都做不到的。
阿联酋相关考虑
在重构开始前值得明确说清楚的一点。
处理客户或员工数据的代码,在重构的每一个阶段都始终受《2021 年第 45 号联邦法令》(Federal Decree Law No. 45 of 2021,阿联酋联邦数据保护法)约束,而不只是在最终完成之后,因此在迪拜招聘 iOS 工程师时,应该询问他们如何在重构过程中而不只是完成之后确保这些数据的安全。
在视图被拆分或在组件之间移动之前看起来正确的从右到左布局,之后可能会悄悄不再正确镜像,因此值得在重构完成后逐屏重新测试,这也是在项目验收前,值得与迪拜的 iOS 工程师一起商定的一项检查。
您会在我们其余的 移动开发 类别中找到这个职位,它同属于 迪拜招聘开发人员 板块。如果您真正需要的是在同一个应用上发布新功能,而不是重构其内部结构,我们的 iOS 开发工程师 页面是更贴近的选择。一款同时面向两个平台的产品,其 Android 一侧通常也需要同样的工程关注,我们的 Android 工程师 页面涵盖这部分内容。如果问题的规模超出单个应用,同时横跨多个产品或平台,我们的 移动解决方案架构师 页面着眼于这种更宏观的视角,如果根本问题其实是 Swift 语言本身,而不是应用结构,请参阅我们的 Swift 开发工程师 页面。
直接解答
我们的 iOS 开发工程师页面涵盖在一个原生 Swift 应用上构建并发布功能到 App Store。本页面涵盖的是一个成熟应用在此之外还需要的底层工程工作:已经变得难以安全改动的界面架构、薄弱或缺失的自动化测试,以及仍然依赖一个人在 Xcode 中手动点按按钮的发布流程。
通常是重新梳理界面、状态和导航的组织方式,让某一处的改动不再破坏另一处无关的功能,往往是把业务逻辑从视图控制器或 SwiftUI 视图中抽离,放进可独立测试的组件里。这项工作是针对一个正在运行的应用逐步完成的,而不是一次完整重写。
Apple 官方的 Xcode Cloud 是内置于 Xcode 的持续集成与交付服务,能自动完成构建、测试,并交付到 TestFlight 和 App Store,配合 Apple Developer Program 会员资格还包含一定的免费计算时长。当手动发布经常变慢、不稳定,或依赖某个人是否有空时,就值得引入这项服务了。
可以,这是常见的合作方式。架构、测试和发布自动化方面的工程工作,通常与持续发布新功能的团队并行进行,而不是为了重构底层应用而暂停新功能开发。
现阶段可能还不需要。当一个应用成熟到架构、测试覆盖率或发布可靠性真正拖慢团队时,这个职位才值得投入,对于生命周期更早期的应用,我们的 iOS 开发工程师页面更直接对应这种情况。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。