Xcode 没人想解决的问题:为什么苹果对平庸感到满意

十年的 iOS 开发,数千次崩溃,以及一个令人不安的事实:Xcode 的糟糕程度,恰好是苹果愿意容忍的程度。

如果你做 iOS 开发者超过,比方说,五分钟,你可能就经历过以下情景:

  • 你打开 Xcode

  • 你按下 <math xmlns="http://www.w3.org/1998/Math/MathML"> ⌘B \text{⌘B} </math>⌘B(构建/编译)。

  • 发生了点什么。但不是你预期的那个东西。

    • 构建挂起了。
    • 索引器卡死了。
    • 模拟器毅然决然地说:今天不是我工作的日子(即模拟器出故障或运行缓慢)。

然后,在库比蒂诺的某个角落,有人耸了耸肩,表示无所谓。

欢迎来到 Xcode 的世界 :这是一款没人爱,人人忍,却被全球最有价值公司保护着的唯一一款 IDE(集成开发环境)。

但我今天不是来单纯发牢骚的。我搞 iOS 应用已经十多年了,从 Xcode 4 熬到了 16。经历了 Swift 的普及、Storyboards、SwiftUI、并发编程等等,所有的一切。

经过这几年的心力交瘁,我得出了一个残酷的结论:

Xcode 不是"意外变差的"。它目前的平庸程度,恰恰是苹果允许它达到的程度。


日常 Xcode 体验:一份痛苦清单

咱们说实话:Xcode 不只是有 Bug,它是以一种我们非常熟悉 的方式持续地不可预测。

一个典型的 Xcode 日常是这样的:

  • 刚加了一个新文件, "Indexing..." 就卡住了 5 分钟。
  • 在一个大文件里输入 <math xmlns="http://www.w3.org/1998/Math/MathML"> . \text{.} </math>. 的时候,自动补全直接冻结。
  • SwiftUI 预览可能工作了一次,然后就消失了,只留下 "Some previews failed."
  • 构建(Build)成功了。App 没启动。模拟器崩了。Xcode 在撒谎。
  • 断点(Breakpoints) ...自己消失了。
  • 你叹了口气。打开活动监视器,把那个索引进程杀掉。

你甚至已经不再惊讶了。而这才是更大的问题。

很多开发者已经停止质疑了。我们默默地接受了这种平庸。


Xcode 是如何变成一个瓶颈的

Xcode 一开始没这么烂。当然,它一直有点笨重------但至少还能应付。

然后一切都变了。

1. Swift 登场了

Swift 让 Xcode 的复杂性呈指数级增长。它是一个强大的语言,但编译器也非常重

再加上 Swift 每年都在变,Xcode 就必须疲于应付:

  • 旧的 Swift 项目
  • 正在过渡中的项目
  • 使用最新特性的新代码库

这可不是正常的 IDE 应该有的工作量。

2. SwiftUI 登场了

SwiftUI 预览本应实时显示 UI 变化。但它们经常:

  • 冻住
  • 悄无声息地失败
  • 像个挖矿程序一样耗干你的笔记本电池

开发者已经学会了不信任预览。如果一个开发工具教会你不要相信它显示的内容------那就有大问题了。

3. 年度操作系统更新周期

苹果每年都会发布新的 iOS、macOS、watchOS、tvOS,现在还有 visionOS。Xcode 必须全部支持。

每一年,都得来一遍。

那什么事情从来没有发生过呢?

"我们停下来,重构一下,花三年时间把工具链做得坚如磐石吧。"

结果就是:每年六月都有新东西。新的 Bug。新的临时解决方案。但 Xcode 还是那个 Xcode。


为什么苹果就是不修复它?

简单的答案:他们没必要

苹果垄断了整个生态

如果你想做 iOS App,你就得用 Xcode。就这么简单。

没有竞争。没有替代品。除非能帮到设备销售,否则苹果没有动力去投资提升开发者的幸福感。

这就是为什么你会看到:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> CI/CD \text{CI/CD} </math>CI/CD 流水线在底层也必须使用 Xcode
  • IDE 工作流程被绑定在专有的代码签名过程上
  • 一群沮丧的开发者社区,却仍然在不断地交付应用

开发者的痛苦不是 <math xmlns="http://www.w3.org/1998/Math/MathML"> KPI \text{KPI} </math>KPI

苹果在乎的是:

  • iPhone 销量
  • 生态系统锁定
  • 服务收入
  • App Store 收入
  • WWDC 制造的热度

这个清单里,根本没有这条:

"这个季度 Xcode 导致开发者浪费了 300 小时在构建失败上吗?"

如果它不影响收入或公众形象------那就不是优先事项。

<math xmlns="http://www.w3.org/1998/Math/MathML"> WWDC \text{WWDC} </math>WWDC 文化:炫酷 > 稳定

苹果的文化是宣布"下一步是什么"。新的 <math xmlns="http://www.w3.org/1998/Math/MathML"> API \text{API} </math>API。新的功能。新的框架。

没有人会站在台上说:

"Xcode 现在速度提升了 50%,崩溃减少了 60%。"

这不带感。这在推特上火不起来。

"Vision Pro 新 <math xmlns="http://www.w3.org/1998/Math/MathML"> API \text{API} </math>API" 才能火。


平庸的隐性成本

Xcode 最糟糕的部分不是崩溃。而是我们已经把这种感受常态化了:

"做 iOS 开发,就是这样的。"

我们学会了:

  • 像条件反射一样删除 <math xmlns="http://www.w3.org/1998/Math/MathML"> DerivedData \text{DerivedData} </math>DerivedData 文件夹
  • 避免某些重构,因为索引器可能会挂掉
  • 禁用预览,改用 <math xmlns="http://www.w3.org/1998/Math/MathML"> print \text{print} </math>print 语句来调试
  • 接受模拟器崩溃是工作的一部分

这会以一种看不见的方式拖慢团队进度。

  • 它破坏了心流状态。
  • 它消耗了认知能量。
  • 它给新开发者灌输了错误观念:现代开发流程就该是这个样子。

而且它悄悄地赶走了人才。一些非常牛的工程师------尤其是做后端的人------试了一下 iOS,体验了一下 Xcode,然后就再也没回来了。


一个"不平庸"的 Xcode 应该是什么样的

让我们幻想一下。

一个很棒的 Xcode 应该:

  • 启动很快。而不是"卡顿 40 秒来重建模块"。
  • 提供值得信任的预览,即使失败也能体面地给出提示。
  • 给出人能看懂的构建错误,而不是用另一种语言抛出编译器崩溃。
  • 允许你直观地调试异步代码。
  • 让你可靠地进行内部整理:重构、依赖升级和诊断。

如果苹果愿意把它当作一款产品来重新构想,而不仅仅是作为一个依赖工具,它可能会是世界上最好的 <math xmlns="http://www.w3.org/1998/Math/MathML"> IDE \text{IDE} </math>IDE。

但这需要高层把这件事列为优先事项。


那么,我们能做什么?

我们没有万亿美元的预算。但作为开发者,我们手上有两个筹码:

1. 要求苹果负责

不是通过空洞的愤怒,而是通过清晰的沟通:

  • 提交详细的反馈。
  • 公开谈论真实的用户体验问题。
  • 别再美化开发者体验了。

沉默对任何人都没有好处。

2. 呼吁更好的开发者文化

让我们停止说:

"唉,Xcode 就那样。"

让我们开始说:

"这坏了。而且这不应该是常态。"

最后的想法

Xcode 不是我们的私人仇敌。它是系统性选择的结果------一个刚好能用来发布 iOS 应用的工具。

但我们值得拥有更好的。

我们为苹果带来了世界上最具创新性的应用。

我们在他们的平台上建立了数十亿美元的业务。

我们学习了 Swift、SwiftUI、Async/Await、Combine、Concurrency。

我们遵守了所有模式。学会了所有规则。买了所有 Mac。

难道我们要求 Xcode 能正常工作,过分吗?

不用花哨。不用神奇。只要可靠就行。

在苹果把 Xcode 当作一款值得完善的产品之前,我们得到的就会是现在这个样子:

一个打磨得无比精美的硬件生态系统......运行在一个开发者们多希望自己能修复的,摇摇晃晃的软件地基之上。

欢迎关注我的公众号:OpenFlutter

相关推荐
合作小小程序员小小店32 分钟前
web网页开发,在线%餐饮点餐%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·数据库·html·intellij-idea·springboot
鹏多多43 分钟前
HTML的Video从基础使用到高级实战+兼容的完全指南
前端·javascript·vue.js
晓得迷路了44 分钟前
栗子前端技术周刊第 107 期 - Angular v21、pnpm 10.22、React 2025 现状调查...
前端·javascript·angular.js
韩曙亮1 小时前
【Web APIs】JavaScript 事件高级 ③ ( DOM 事件流 | 捕获阶段 | 目标阶段 | 冒泡阶段 )
前端·javascript·web apis·捕获阶段·目标阶段·冒泡阶段·dom 事件流
p***h6431 小时前
React数据分析应用
前端·react.js·前端框架
4***99741 小时前
TypeScript类型体操
前端·javascript·typescript
u***09641 小时前
TypeScript装饰器
前端·javascript·typescript
h***83931 小时前
React虚拟现实开发
前端·react.js·vr
7***n751 小时前
React虚拟现实案例
前端·react.js·vr