xcode 史上最垃圾的 ide,没有之一

95 阅读6分钟

如果不是公司强制要求做 iOS 开发,我这辈子大概都不会碰 Xcode。用了几个月之后,我愈发无法忍受它的种种缺陷。202x 年的 IDE,居然还能在最基本的功能上烂到这种程度。和主流的 VS 系列、JetBrains 系列相比,体验简直是天壤之别,保守估计落后至少 15 年。

不仅是 Xcode,苹果的语言设计也同样反人类、处处不便。下份工作我一定要争取彻底摆脱和苹果开发的任何关系。

细数 一些 Xcode 的离谱槽点:

快捷键设计反人类

目前在 xcode 中没有一个看起来正常的快捷键,用的太不爽了,随便挑几个说吧

  • Esc 键:在任何应用里,Esc 都意味着“退出”或“关闭”。但在 Xcode 中,它居然是“代码提示”。逃逸和提示有什么关系?设计师到底在想什么?
  • 上下移动:在其他 IDE,甚至在 WPS 里,方向键都能上下移动文字。但 Xcode 偏偏要用中括号键。上下移动和中括号有什么半点逻辑?
  • 插入/删除:向下插入一行要 Ctrl + E + Enter,删除当前行要 Ctrl + A + Ctrl + K。必须双手操作两次,繁琐到离谱。苹果官方这么多年就没想过优化吗?

多行注释缺失

Swift 和 Objective-C 源码里都用过多行注释,但 Xcode 本身却完全不支持快捷键。自家语言支持 /* */,自家 IDE 却没快捷键?难道苹果程序员都是纯手打星号的?

修饰键符号化:自找麻烦

这几个键,用符号代替我认为是最没用,或者起反作用的。
键盘上的键本来都有名字,Option 就读 Option,Command 就读 Command。苹果非要搞一堆奇怪符号:⌥、⌘、⇧。

  • Command ⌘
  • Option ⌥
  • Control ⌃
  • Fn 🌐
  • Shift ⇧

image.png

  • 请问 Shift + Command + B 直观,还是 ⇧⌘B 直观?每次看各种应用的快捷键,都需要额外在脑中转换一次

  • 更离谱的是,这些符号没法口头交流。大家口头上还是说“Command”,难道要说“四叶草”?

默认不使用多 Tab:反生产力设计

日常开发中,跳转到其他文件查看代码是家常便饭。Jump to Definition 在任何 IDE 里都应该默认新 Tab 打开。 但 Xcode 偏偏要把这个功能藏得深,而且默认就在同一个 Tab 跳转。

  • 难道苹果程序员只用一个页面?
  • 难道他们跳转十次也甘心在同一个页面来回折腾?

如今很多人一个屏幕都不够用,你却让我在一个 Tab 里打转,简直是生产力自杀。

文件增删与重命名:复杂到离谱

这是最反人类的设计。在 202x 的今天,Xcode 竟然还没实现“所见即所得”的文件管理,在其他 IDE,文件和目录就是一一对应,增删改同步无比自然。xcode 里的 Group 和硬盘上的 Directory 玩“两层皮”,删了文件硬盘还在,换了位置 IDE 报错。重命名一个 Project 或 Target 简直像在做外科手术,不仅要动源代码,还要去翻那串根本不是给人看的 xcodeproj 配置文件。

没有 gitignore:原始人级别的缺陷

到今天,Xcode 创建工程居然还没有默认生成 .gitignore

  • A 设备创建工程,B 设备拉取,必然出现 xcodeproj 改动。
  • xcodeproj 文件基本不可读,版本控制里全是垃圾 diff。

苹果程序员自己不觉得难受吗?非要让用户手动去创建 .gitignore,这不是 2026 年该有的体验。

Rename 功能:时好时坏

在其他 IDE,重命名类名会自动联动修改所有引用,在 20 年前这是最基础的功能。 但在 Xcode,这个功能时而能用,时而失效。

  • 结果就是开发者要么手动全局替换,要么祈祷 Xcode 心情好。

Objective-C:奇葩语法的历史遗留

苹果早期为什么要 All in Objective-C?这种语法就是为了“与众不同”而不同,完全反人类。 更讽刺的是,直到今天,Xcode 依然经常连 OC 的括号补全都做不好。 2026 年了,AI 时代了,括号补全都搞不定,这不是笑话是什么?

swift

苹果本来有机会在 Swift 上“回头是岸”,结果却继承了 OC 的糟粕,最不能忍受的就是形参还得起一个标签名。

本来形参名就够了,还得额外想标签名,美名其曰“读起来像英文句子”,实际效果:shit!完全不建议使用这个功能,请一律下划线。

两大缺点:

联动 Rename 失效
假设有 n 个地方调用了这个函数,你想修改标签,但狗屎 Xcode 只改了一部分。剩下的怎么办?只能手动收拾烂摊子。

API 名超长
如过想在网络上搜某个函数是什么意思,由于标签名是方法名的一部分,你必须得复制整行,而不只是复制方法名。比如下面你不能只复制initialize,还得把didFinishLaunchingWithOptions launchOptions复制上

public static func initialize(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)

废物格式化

Xcode 的格式化功能堪称史上最弱。偏偏 Swift 语法又极为严格。 比如: var a= 1 因为 a= 之间没有空格,编译直接不过。必须手动插入空格。2026 年了,AI 时代了,IDE 还在逼人手动插空格,这不是笑话是什么?

现代 AI IDE:被 Swift 拖死

Swift 的语法检查太严格,很多错误只有在 Xcode 中才能提示。

  • 在 VSCode 等现代 AI IDE 中,很多检查根本跑不出来。
  • 结果就是:哪怕你想摆脱 Xcode,也不得不吃下这坨 shit
  • 甚至在 playground 中和 xcode 中都可能出现一个能跑一个不能跑的情况

默认应用:阴魂不散

macOS 把 Xcode 设置成了所有可读文件的默认应用。

  • 一个 JSON,一个 XML,甚至普通文本,都会被 Xcode 强行打开。
  • 你右键设置了其他默认应用?没用!Xcode 就像阴魂不散,老是跳出来恶心你。

这完全是强制捆绑,非开发场景下简直就是骚扰。

配置地狱:Build Settings 迷宫

Xcode 的 Build Settings 界面堪称迷宫:

  • 成百上千个配置项,名字模糊不清。
  • 有些选项还会互相覆盖,结果就是“改了没效果”。
  • 想要搞清楚某个参数的优先级,必须翻文档 + StackOverflow + 试错。

这不是 IDE,这是配置地狱。

XCFramework:推荐却不配套

苹果大力推荐使用 XCFramework,说是未来的标准。结果呢?

  • 创建和打包流程居然没有一键化工具,开发者必须自己写脚本。

  • 这不是推荐,这是甩锅