如果不是公司强制要求做 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 ⇧
-
请问 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,说是未来的标准。结果呢?
-
创建和打包流程居然没有一键化工具,开发者必须自己写脚本。
-
这不是推荐,这是甩锅