ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

iOS开发工程师进阶指南:从基础原理到面试实战要点

iOS开发工程师进阶指南:从基础原理到面试实战要点 1. 这个岗位到底在做什么1.1 从职位描述看日常核心工作很多想入行iOS开发的人一开始都会被各种招聘网站上的职位描述搞懵。一会儿是“负责核心模块开发”一会儿是“持续优化性能与体验”看起来高大上实际上就是让你写界面、调接口、修Bug、上架版本。这不丢人我做了这么多年见过太多简历上写着“独立负责XX应用架构设计”的人实际到了白板上一问三不知。倒不如老老实实把日常工作捋清楚。iOS开发工程师的核心工作可以拆成四块第一是页面与交互开发也就是我们常说的UI层。SwiftUI也好UIKit也好你要能把设计稿变成用户能点的东西并且处理各种屏幕适配、横竖屏切换、暗黑模式、字体大小变化这些琐碎问题。第二是业务逻辑与数据流登录注册、缓存策略、状态管理、数据持久化这些决定了App稳不稳。第三是网络层与数据同步从接口设计到弱网处理、断点续传、离线消息都是基本功。第四是性能优化与稳定性保障启动时间、卡顿率、崩溃率、包体积这四项指标直接决定了App在用户手机上的口碑。很多人把iOS开发简单理解成“会写Swift就行”这是最大的误区。iOS开发是一个完整的工程生态从Xcode工程管理到CocoaPods或SPM依赖处理从本地调试到TestFlight分发从App Store审核到Crash回溯每一个环节都能让你卡住半天。尤其是现在AI辅助编程工具越来越强写代码本身的门槛在降低但“会写”和“能交付”之间差着十万八千里。再说说这个岗位的行业现状。这两年移动互联网进入存量阶段纯新增App的机会变少了但iOS开发的岗位需求并没有消失而是在发生结构性变化。大厂在招的是能搞定性能优化、跨端治理、底层基础组件的人中小公司在招的是能一个人扛起iOS端所有事的多面手还有一些游戏公司、硬件公司在招具备特定领域经验的人比如Unity全栈开发、构建工具链开发。所以iOS开发工程师这个职位天花板并不低关键看你把自己定位在哪一层。1.2 能力模型与进阶路线给准备入行或者准备跳槽的朋友一个相对清晰的能力分层。初级iOS开发对应大概1到3年经验要求是能独立负责一个模块的开发UIKit用得很熟Swift语法没问题能处理常见的崩溃和界面问题知道怎么用Charles抓包调试签过证书上过架。这个阶段的核心关键词是“完成”。中级iOS开发对应3到5年经验要求不只是完成功能而是开始参与架构设计。你要能讲清楚MVC、MVVM、MVVM-C各自的优缺点能解释清楚为什么SwiftUI的响应式状态管理会取代大部分传统KVO场景能在性能问题出现时快速定位是CPU瓶颈还是IO瓶颈。这个阶段的核心关键词是“优化”。高级iOS开发对应5年以上经验要求具备跨模块协调能力和技术选型判断力。比如团队要从OC迁移到Swift你怎么评估工作量App启动已经900毫秒了要怎么压到400毫秒组件化推进时不同业务线之间的依赖怎么治理这些不是靠写代码能解决的需要的是整体认知。这个阶段的核心关键词是“决策”。我在面试时经常遇到一种候选人简历上写了五年经验但问到底层原理时只会背答案问“为什么”就支支吾吾。这种人往往就是在一个岗位上重复了五年而不是成长了五年。所以无论你是刚入门还是准备跳槽我给你的第一个建议都是永远不要停止追问“为什么”。用UIKit时想一下它和Core Animation的关系用SwiftUI时想一下它的依赖追踪机制是怎么实现的用GCD时想一下它和线程、队列的关系。这些追问才是你面试时能脱颖而出的真正底气。2. 简历与面试准备2.1 简历怎么写才不踩坑简历是面试的敲门砖但我发现大部分iOS简历都写得很糟糕。最常见的三个问题一是通篇堆砌名词什么“精通Swift、精通OC、精通RAC、精通RxSwift”看得人头皮发麻。二是项目经历写得像产品说明书“负责XX模块的开发与维护”一句话带过完全看不出你的技术深度。三是没有数据支撑你说你优化了启动速度好从多少优化到多少用什么工具测的优化前后对用户体验的具体影响是什么说不出来那这句话等于没写。写iOS简历我建议你用STAR法则去拆每一个项目。S是背景这个项目是做什么的在什么场景下产生T是任务你在这个项目里具体负责什么A是行动你为了解决这个问题做了什么技术选型和方案设计R是结果最终效果如何用数据说话。比如“负责启动速度优化”可以改成“针对冷启动耗时问题通过将XX模块从同步加载改为异步懒加载、对YY图片预解码策略进行了调整借助Instruments Time Profiler进行瓶颈定位最终将冷启动时间从1.2秒降至0.6秒App次日留存提升明显”。这个描述至少展示了你会用工具、懂原理也知道怎么评估结果。另外不要把所有的东西都写在前面。iOS开发者的简历建议把“技术栈”放在基本信息之后用两到三行说清楚你主要用什么语言、什么UI框架、什么架构模式、熟悉哪些工具链。然后项目经历才是重头戏占整个简历的六成以上。至于自我评价很多人的“热爱技术积极向上”其实可以直接删掉HR不关心你积不积极她只关心你能不能干活。有个细节提醒一下现在很多公司会用简历关键词筛选系统。所以如果你的实际经验里有SwiftUI、Swift Concurrency、Core Data、Widget Extension、App Clips、Metal、Core ML这些关键词尽量在项目经历里自然地带出来而不是只在技术栈列表里堆一遍。当然前提是你真的用过面试官一定会追问。2.2 面试流程与各轮考察点iOS岗位的面试流程大致可以分成四个环节。第一轮通常是电话面或者在线笔试主要考察基础是否扎实、沟通是否顺畅。第二轮是技术面通常由iOS团队里的资深工程师来面考察点集中在语言特性、UI机制、网络、存储、并发这些重点领域。第三轮是综合面可能由技术总监或跨部门负责人来面重点考察项目深度、架构思路、团队协作意识以及抗压能力。第四轮是HR面聊薪资、聊职级、聊稳定性。每一个环节的侧重点完全不同。电话面的时候面试官其实是在快速判断你“是不是真的做过iOS项目”。我见过太多简历写得天花乱坠、电话面连“UIViewController生命周期”都说不利索的候选人。所以第一关的核心是基础概念的准确性和流畅度。笔试环节有些公司会出算法题有些会出iOS相关的设计题比如“如何设计一个图片缓存库”“如何保证网络请求的线程安全”建议平时多做一些这样的开放题练习。技术面是整个流程的重中之重。我建议候选人不要被动地等面试官问而是学会把话题引到你擅长的领域。举个例子面试官问你用过哪些设计模式你回答“单例、观察者、工厂”之后可以顺势补一句“之前在一个项目里我用观察者模式重构了消息推送模块因为原来的通知中心分发链路太长出了问题很难排查我改造之后通过一个轻量的事件总线统一管理性能提升比较明显”。这么一说面试官大概率就会顺着你的项目经历继续深入你就有机会展示你的完整思考过程而不是被生硬地问“什么是观察者模式”这种死记硬背题。综合面更看重你的判断力和沟通能力。比如面试官问你“如果产品让你一个月做出来的功能你觉得至少要两个月怎么办”你需要的不是表忠心说“我加班做完”而是客观评估工作量、明确风险再给出一个分阶段交付的方案。这种题没有标准答案但能反映出你的职业成熟度。HR面的时候容易被忽视但其实信息量很大。薪资谈判时不要只报一个数字最好给出一个有依据的范围比如“我现在月薪是X根据市场上同类职位的水平我希望涨幅在20%到30%之间”。职级确认时要搞清楚对方给你的定级对应的职责边界是什么避免入职后发现做的事情和预期差距太大。3. 高频考点拆解3.1 语言与内存管理Swift是现在iOS开发的主流语言但面试官考察Swift时重点其实不是语法本身而是你对语言设计理念的理解。比如Optional的本质是什么它其实是一个enum是编译器层面的空安全机制。再比如Swift的Struct和Class有什么区别除了值类型和引用类型这个基础答案之外你需要说出它们在方法分派上的差异、在拷贝时的行为差异写时复制、在并发安全上的影响以及在实际工程中什么场景下应该优先选Struct什么场景下必须用Class。内存管理几乎是每一场iOS面试必考的内容。ARC的工作原理、循环引用的成因、weak和unowned的区别这些都是基础中的基础。我面试时经常给候选人一个场景一个ViewController持有逃逸闭包闭包内部又使用了self会不会造成循环引用如果self本身是weak的会不会如果闭包里用的是[weak self]那么在闭包执行期间self可能已经释放了这种时候怎么处理UI更新层层追问下去就能看出候选人是背过答案还是真的理解对象生命周期。这里要特别提一下iOS开发者模式这个热词。很多初学者在真机调试时遇到“开发者模式未开启”的提示直接卡住。其实这是苹果从iOS 16开始加的一道安全校验需要在手机上打开“设置—隐私与安全性—开发者模式”然后把手机重启一次才能正常安装和调试开发包。有些机型在重启后还需要输入一次密码所以整个流程看起来像是卡住了实际上只是等待确认。这个问题在面试时问出来不算热点但在实际工作中确实能卡掉不少新人。属性关键字也是必考。strong、weak、copy、assign、atomic、nonatomic这些不只是背定义你得知道什么时候用copy。比如NSString类型的block属性为什么要用copy因为block一开始是在栈上的赋值给属性时如果不拷贝到堆上出了作用域就可能变成野指针。Swift里没有assign这个概念但你要理解weak和unowned的使用场景差异以及为什么在Swift Concurrency的新模型里MainActor和nonisolated可以帮你规避大量数据竞争问题。内存泄漏的排查也是硬功夫。Xcode自带的Leaks工具只能排查到Swift和OC层面通过 Instruments 暴露出来的泄漏但很多泄漏是隐性的比如NSTimer对target的持有、CADisplayLink没有移除、WKWebView和JS交互引起的内存残留。我自己的经验是用Malloc Stack和VM Tracker配合使用通过对比每次操作前后的内存快照基本上能定位到90%以上的泄漏源。3.2 并发与RunLoop并发是iOS面试里的重头戏而且随着年龄段的上升考察深度是完全不同的。初级面试主要问GCD的队列类型、同步异步的差异、死锁是怎么产生的。中级面试会扩展到NSOperation和GCD的选择、OperationQueue的依赖关系、信号量在流量控制中的应用。高级面试则会更关注Swift Concurrency、Actor隔离、全局Executor、任务取消等细节。举一个很典型的面试题在MainQueue上同步执行一个任务会发生什么答案是死锁。为什么因为同步任务会阻塞当前线程而当前线程就是MainQueue在处理的线程MainQueue本身不能继续派发下一个任务于是两者互相等待卡死。这个题目看起来简单但能考察出你对队列和线程模型的理解是否透彻。再延伸一下如果在子线程里往MainQueue同步提交任务会不会死锁不会因为子线程阻塞不影响MainQueue继续执行等MainQueue处理完你的任务子线程就会恢复运行。这些细节面试官是很喜欢听到你慢慢分析出来的。RunLoop也是绕不开的知识点。很多人只知道RunLoop是“一个循环”但你要能说清楚它解决的核心问题是什么它让线程在没有任务时休眠、释放CPU资源有任务时被唤醒处理事件同时决策了系统消息、定时器、触摸事件、UI刷新、Autoreleasepool释放等事件的处理时机。所以面试官问“为什么滑动TableView时定时器会不准确”你就要能回答Timer默认加在DefaultMode下滑动时RunLoop切换到了UITrackingRunLoopModeTimer就不被处理了解决办法是把Timer加到CommonMode下或者用DispatchSourceTimer。Swift Concurrency是这几年的新考点也是很多面试官自己在补课的内容。它的核心不是async/await的语法而是结构化并发模型怎么解决回调地狱和任务泄漏的问题。比如TaskGroup、AsyncSequence、MainActor这些机制在面试中越来越常见。如果你现在准备跳槽我强烈建议花时间把Swift Concurrency和Combine的边界梳理清楚因为未来几年这会成为iOS面试的分水岭。3.3 UI与渲染机制UI相关的面试题永远是iOS面试的大头也是最容易暴露水平的地方。一个基础问题“UIView和CALayer的区别和联系是什么”初级答案是说UIView是视图容器CALayer是渲染层。但这个答案太浅了。你要能说出UIView是CALayer的委托对象负责处理触摸事件和交互CALayer负责背板渲染和动画。UIView的frame、bounds、center其实都是对CALayer对应属性的封装UIView的显示层级和CALayer的图层树是一一对应的关系。这样回答面试官就能确认你不是背题而是真的懂得视图渲染的底层逻辑。再往下问事件响应链是另一个高频考点。hitTest和pointInside的实现机制第一响应者如何确定事件怎么沿着响应链向上传递。这些内容是UIKit事件系统的核心但很多人只记住了一个“响应链”的名词问到具体实现就蒙了。我建议你深入到源码层面去理解至少要把hitTest的递归查找逻辑在自己脑子里跑一遍知道不规则图形的按钮怎么实现点击区域、透明的View怎么拦截事件。SwiftUI出现之后UI考察的重心也在变。面试官可能会问SwiftUI和UIKit的差异SwiftUI的View为什么是值类型State和ObservedObject的区别EnvironmentObject是怎么实现依赖注入的。这些问题背后考察的是你对声明式UI和响应式的理解程度。SwiftUI的依赖追踪机制和React的虚拟DOM、Vue的响应式代理有很大不同它基于属性包装器和偏序依赖图理解这个才能真正用好SwiftUI而不是把它当UIKit在用。渲染性能优化也是必考项。离屏渲染是什么为什么圆角和阴影容易触发离屏渲染导致列表滑动掉帧怎么用shouldRasterize来优化这个知识点我建议配合Instruments的Core Animation工具来进行实验而不是只在理论层面背。当你实测看到不同设置下的FPS差异之后你对渲染机制的理解会有一个质的飞跃。还有一个问题经常会问到“TableView/CollectionView卡顿怎么排查”标准答案大概会说用Time Profiler、检查是否有离屏渲染、检查Cell的复用逻辑、检查图片解码是否在主线程。但真正做过性能优化的人会再加一点先去检查Cell的高度计算是否提前完成iOS 12以后的自定义高度预估机制怎么配置这两个点才是实际项目中最常见的坑。3.4 网络与安全方向iOS的网络层面试题绕不开HTTP和HTTPS。URLSession其实已经帮你封装得很好但面试官要考察的是底层TCP的三次握手和四次挥手TLS握手里证书校验的过程HTTP/2多路复用为什么能缓解队头阻塞弱网情况下怎么做请求超时重试和指数退避。这里有两个和实际工程强相关的高频问题。第一个是ATSApp Transport Security。苹果强制要求App使用HTTPS但很多项目早期用了HTTP接口于是Info.plist里加了NSAllowsArbitraryLoads豁免。面试官问你这个字段的作用时你不但要能解释ATS最好能说出审核风险以及正确的处理方式只对特定域名做豁免、申请开通HTTPS、用网络层做HTTPDNS替代。第二个是“对称加密和非对称加密的区别”。这个知识点本身不难难的是结合实际场景。比如HTTPS握手过程中客户端和服务器的证书校验、密钥协商、会话密钥生成这个完整流程你能写出来吗抓包调试也是很多公司在面试中会问到的实操能力。用得比较多的是Charles和Wireshark。Charles做HTTPS抓包时需要在手机上安装并信任Charles的CA证书。但iOS从10.3开始安装描述文件后还要去“设置—通用—关于本机—证书信任设置”里手动打开信任开关这个细节卡过很多人。而且如果你在工程里做了SSL Pinning证书绑定Charles是抓不到包内容的这时候你就需要判断是绕过Pinning还是让后端配合临时关闭。我在实际工作中就遇到过这种场景接入第三方SDK的时候对方开启了SSL Pinning我们本地无法看到请求细节排查问题时非常痛苦。后来我们专门在这个SDK外面包了一层调试模式开关仅在Debug环境下跳过证书校验这才把联调效率提了上来。iOS逆向和安全加固的知识现在在大厂面试中也越来越常出现。比如class-dump能导出App的头文件、Theos能写Tweak、越狱环境下的Hook检测、代码混淆和反调试怎么做。不过这个方向的题目通常不会考太深面试官主要是想看你对客户端安全的意识。至少你要知道iOS的沙盒机制、数据保护等级、Keychain的用途以及在网络传输层做加密和防篡改的常见方案。4. 项目经历与工具链实战4.1 项目描述怎么讲出亮点面试时讲项目是最容易拉开差距的环节。很多候选人讲项目时喜欢一上来就讲技术栈“我们项目用了Swift、SwiftUI、RxSwift、Moya、Kingfisher”面试官听了一脸茫然。正确的打开方式是先讲业务背景这个项目解决什么问题服务什么人群在业务层面如何运转。然后再进入技术层面你在其中负责什么遇到了什么有挑战性的问题你是怎么分析、怎么解决的。我给你一个可以直接套用的讲项目框架。第一步一句话说清楚项目背景和规模比如“这是一个日活用户超过十万的电商类App我所在的三人iOS小组负责全部客户端功能迭代”。第二步聚焦一到两个你最有成就感的痛点不要太零散。比如“App在旧机型上启动要3秒用户流失严重我负责启动优化专项”。第三步讲思路和方案你用了什么工具去量化问题做了哪些实验最后采用了什么技术方案。第四步展示结果和成长量化指标、你在过程中沉淀了什么方法论或者工具。这四步走下来一个有深度、有逻辑的项目故事就出来了。关于Github打包iOS和Xcode导包签名的问题我多说一句。很多小团队做内部测试分发时会用到一些开源的签名打包工具或者第三方分发平台。这个领域的水很深比如签名失效、设备UDID配额限制、企业证书被撤销等。面试时如果你提到做过内部测试分发流程面试官大概率会追问iOS上架的签名机制是什么开发和发布证书有什么区别描述文件Provisioning Profile的作用是什么这些问题的答案其实指向同一个原理利用非对称加密和苹果的证书体系确保安装到设备上的安装包是由可信任的开发者签名的。你能把这个原理说清楚面试官就会觉得你不是只会点按钮。4.2 开发者模式与证书签名、打包上线的完整闭环iOS开发和Android一个很大的不同就在于它有一套比较封闭的证书签名和安装机制。很多新手第一次接触时很容易一头雾水。这里我用一个比较完整的流程帮你打通你从零开始开发一个App最后在别人手机上安装运行中间到底发生了什么第一步是在Apple Developer网站注册开发者账号。个人账号一年费用99美元公司账号按人数来定。有了账号之后你需要生成证书签名请求CSR文件然后上传到开发者后台生成开发证书和发布证书。第二步是注册App ID这个唯一标识会绑定你的Bundle Identifier。第三步是注册调试设备把真机的UDID添加到开发者后台这一步和你手机上的开发者模式有直接关系不开启开发者模式的设备无法被识别为可信调试设备。第四步根据开发/发布环境分别生成对应的描述文件并下载安装到Xcode里。第五步Xcode进行Archive打包通过Ad Hoc或App Store Connect进行分发。第六步如果你选择了TestFlight需要在TestFlight里添加测试员邮箱然后发起外部测试审核审核通过后测试员就可以下载安装测试包了。这套流程本身不难但出问题的点非常多。常见的一种情况是开发者证书在电脑钥匙串里丢失或者过期了所有依赖这个证书的App都签名失败。这时候需要去开发者后台重置证书同时更新所有关联的描述文件。还有一种情况是Bundle Identifier前后端配置的不一致导致某个推送服务或者支付功能无法工作。所以实际开发中我建议团队里至少有一名成员把证书和描述文件的管理单独列一个checklist文档每次证书变更、续期、人员离职交接时都要更新这个文档。否则等它出了问题再排查一查就是半天以上时间。另外再提一下uni-app这类跨端框架的打包问题。很多用uni-app开发的需求方会问“uni-app项目能打包成iOS吗”“uni-app打包iOS收费吗”。实际上uni-app打包iOS分为两种方式一种是使用HBuilderX云打包云端会使用公共证书帮你打一个开发包但这种方式功能有限、分发受限另一种是本地离线打包需要你先在Apple Developer后台生成证书和描述文件然后用Xcode对离线打包工程做签名和发布。离线打包不收费但需要你自己处理证书和工程配置这个过程对不熟悉iOS开发的人来说是有一定门槛的。如果只是拿来做内部分发测试用TestFlight是最省事的方案。4.3 调试与性能分析实用技能说到日常调试Charles、Instruments和LLDB几乎是iOS开发者的三件套。Charles用来抓包看网络请求Instruments用来做性能分析Time Profiler看CPU耗时、Core Animation看帧率、Leaks看内存泄漏、Energy Log看耗电LLDB是断点调试和动态验证代码的工具。这三个工具熟练了你排查问题的效率能提升一个量级。这里我分享一个排查启动性能的完整思路。先用Instruments的App Launch模板录制一次启动过程观察在main函数前后分别耗时多少。然后打开Time Profiler看堆栈定位到耗时函数。常见的问题集中在图片在Main线程同步解码、启动时同步加载大量本地配置文件、首屏依赖了过多的网络请求、动态库加载太多等。针对这些原因对应的解法是图片改为异步预解码、配置文件懒加载或者放到子线程解析、网络请求优先级做调整、把不必要的动态库合并到主二进制或改为静态链接。做完这些之后再测一遍数据你就能清晰地看到每一项优化带来的具体收益。LLDB也是很多候选人容易忽略的点。面试官如果问“线上崩溃没有符号表怎么定位”回答不能只是“用dsym还原崩溃日志”。你要能说清楚怎么用atos命令、怎么用symbolicatecrash脚本以及怎么把崩溃日志中的地址和dSYM文件关联起来。如果App集成了第三方崩溃监控SDK还要知道如何上传dSYM文件到对应平台。这些细节在实际工作中非常常见但在面试中能答完整的人不多。我建议你找一台不用的Mac真正跑一遍崩溃日志解析的流程踩一遍坑印象会特别深刻。5. 常见问题与避坑指南5.1 面试中的典型失分点和破解思路我总结了几个iOS面试中常见的失分点帮大家提前避坑。第一个是“只背答案不能举一反三”。比如面试官问什么是循环引用你回答“两个对象互相持有对方导致内存无法释放”然后呢具体到UITableViewCell里的block、ViewController里的定时器你都要能举例子。建议准备一个自己实际遇到过的循环引用案例把问题的背景、排查过程、解决办法完整地复述一遍。这在面试官听来比泛泛而谈“ARC是自动引用计数”要有说服力得多。第二个是“项目讲得太平淡”。很多人做完一个项目只记得用了什么框架不记得当时的思考。我建议你每次完成一个里程碑之后用半个小时写一个复盘文档记录当时遇到了什么问题、尝试了什么方案、为什么最终选了A而不是B、如果重新做一次会不会有别的选择。面试前只要你翻出这些复盘文档项目深度自然就有了。第三个是“不关注系统机制与版本特性”。iOS的版本适配是开发工作的常态也是面试考察的重心之一。比如灵动岛适配、深色模式、桌面小组件、App Clips、iOS 15的焦点模式以及iOS 14推出的App隐私标签。这些如果你都不了解面试官会觉得你只是在写老代码没有持续学习的能力。这里我特别说一下新版iOS发布后一定要第一时间看WWDC的Session视频不需要看全部至少把你正在做的领域相关的看一遍然后动手写Demo验证。这个习惯能让你在面试中经常说出“这个机制我在iOS 16上实测过一个特殊情况”会比背书强很多。第四个是“算法题准备不足”。虽然iOS面试的算法难度整体不如后端但一些大厂会出中等难度的算法题比如链表反转、二叉树遍历、动态规划入门、字符串处理等。没有任何公司会招一个完全不会写算法的人。建议每天保持二十分钟刷题频率主要是练手感和思维而不是死记答案。5.2 实操技能相关的热门疑难解答接下来我针对最近网上讨论比较多的几个iOS实操问题做一个集中解答。第一个是“iOS旧版软件库网站能不能用”。网上经常能看到各种“iOS旧版软件库”提供旧版本App的下载。我个人的建议是不要依赖这些渠道安全风险是很明显的一是这些安装包可能被人二次打包并注入了恶意代码二是旧的App往往和新版系统不兼容你装完后可能会频繁崩溃。如果你确实需要测试旧版本App合理的做法是在Xcode里下载对应的旧版本App模拟器镜像或者使用TestFlight的历史版本功能再或者找一台老设备做专项回归测试。第二个是“iOS分屏怎么实现”。iPadOS是支持多任务的比如Slide Over和Split View。作为开发者的角度要考虑的是你的App是否适配了多任务分屏。如果你的App锁定了横竖屏、或者设置了固定的window尺寸那么分屏适配就会出现问题。具体做法是支持UIWindowScene的生命周期对各种尺寸和宽度的布局做适配并且在Info.plist里正确声明支持的orientation。很多人面试时提到做过iPad适配但问到Split View的实现细节就答不上来这就是准备工作没做到位。第三个是“iOS自动化怎么做”。UI自动化测试的主流方案是XCUITest你可以用代码来驱动App做点击、滑动、截图等操作也可以结合Fastlane做打包后自动跑测试的流水线。云测平台可以把测试分发到几十台真机上做兼容性测试。自动化程度高的团队一般在CI/CD的Pipeline中集成单元测试、UI测试、代码覆盖率统计、静态扫描等步骤。如果你所在的项目还没有这些基建我建议可以从一次自动化打包开始慢慢把测试环节加进去这个方向的经验在简历上是非常加分的一项。第四个是“AVPlayer在线播放卡顿”。AVPlayer是iOS上播放本地和在线音视频的底层框架很多在线播放的App都是在它上面做上层封装。遇到卡顿问题通常要从这几个方面排查视频编码和封装格式是否兼容、网络环境下的缓冲策略是否合理预加载多少秒、播放中是否持续缓存、音频后台播放和路由变更的处理、以及是否实现了无缝切换不同清晰度的逻辑。另外一个很多新手会踩的坑是播放器没有在合适时机调用playImmediatelyAtRate导致播放始终处于缓冲状态看起来就像是卡住不动了。调试时可以借助Xcode自带的Network面板观察网络请求的状态码和缓存命中情况也可以打开AVPlayer相关的日志输出看到底是网络层还在拉数据还是解码已经跟不上了。第五个是“Flutter低功耗蓝牙在iOS上有没有坑”。这个问题的答案是有而且不少。iOS对蓝牙权限的管控很严格必须在Info.plist里声明NSBluetoothAlwaysUsageDescription否则会在调用蓝牙API时直接被系统拒绝或闪退。同时iOS上CoreBluetooth的扫描和连接回调只有在App处于前台时才会稳定触发后台扫描需要在工程里打开对应的Background Mode。Flutter的插件层只是把这些系统能力封装了一下它不能绕开系统限制。所以在做iOS蓝牙功能时我在实际项目里的经验是权限声明一定要提前检查测试时要明确区分前台和后台场景连不上设备时优先去系统日志里确认CoreBluetooth的状态而不是在Dart层反复去改扫描参数。5.3 给准备入行和跳槽的人几句实在话关于iOS开发这个岗位的长期发展我给三类朋友分别说几句。如果你是刚毕业或者零基础准备转行我的建议是不要一开始就刷面试题先静下心来完成一个完整的项目。把Swift基础语法过一遍然后用UIKit或者SwiftUI做一个笔记类App实现本地增删改查、数据持久化、列表展示、详情跳转这些最基础的功能。然后把项目放到GitHub上写清楚README、附上截图甚至演示视频。这个过程中你自然就会遇到很多问题比如怎么处理键盘遮挡输入框、怎么传值、怎么做数据刷新。你为了解决这些问题而查阅的资料、踩过的坑才是你这阶段最宝贵的经验。学完之后再去有针对性的刷面试题效果会好得多。如果你是有两年左右经验的开发准备跳槽去更好的平台我给的建议是把“会用的东西”变成“能讲清楚原理的东西”。你可能会使用Moya封装网络请求但Moya内部是怎么基于Alamofire和RxSwift做封装的你用SDWebImage做过图片缓存但它的缓存策略是怎么设计的、磁盘缓存上限怎么控制这些追问就是面试官考察你技术深度的地方。如果你已经是五年以上的老兵我想给的建议是选赛道比单纯刷题重要。iOS开发本身是移动互联网的产物在这个技术浪潮逐渐成熟之后往技术管理、架构治理、跨端基建、AI应用开发、游戏开发这些细分方向走都有机会。关键是要想清楚自己未来两到三年的方向是什么然后把简历、项目经历、面试准备都围绕这个方向去做聚焦。技术这个行业变化是真的快。前几年大家还在争论OC和Swift谁更有前途后来SwiftUI流行了再后来Swift Concurrency出现了现在AI辅助开发工具又在改变大家写代码的方式。但有一个东西是不变的你对你写过的每一行代码、做过的每一个决策的理解和复盘能力。这个东西面试官聊几句就能感受出来。把它沉淀好你的iOS开发之路基本不会差到哪里去。
返回列表