Xcode essentials
Developer Tools 进阶 20m

Xcode 高效开发必备技巧

Xcode essentials

2024年6月10日

在 Apple 官方观看视频

一句话判断

不管你是 Xcode 新手还是老用户,这个 session 里的导航、搜索和 Git 技巧至少有三个是你不知道的——尤其是 Find Navigator 的高级搜索和 tab 管理的隐藏行为。

这场 Session 讲了什么

两位 Xcode 团队的成员(设计师 Cheech 和项目经理 Myke)从”编辑-调试-测试-提交”这个日常开发循环出发,系统梳理了 Xcode 中能显著提升效率的功能。Session 覆盖了三大板块:如何找到你要改的代码、如何调试和测试、以及如何分发。

在”找代码”部分,Cheech 详细演示了 Project Navigator 的底部过滤栏——不仅能按文件名搜索,还支持按 target 名称过滤、按 git status 过滤(只显示已修改的文件)。Find Navigator(Command-Shift-F)的高级用法是重点:你可以用底部过滤栏在搜索结果中做二次筛选、按文件名过滤、用搜索范围(scope)限定目录、保存常用搜索范围、以及用符号索引模式(点击搜索框上方的”Text”切换)做类型层级查询。

Tab 管理部分揭示了 Xcode 的双类型 tab 设计:永久 tab(你显式打开的文件)和隐式 tab(你只是浏览过、用斜体标题标识的临时 tab)。还介绍了 Jump Bar 的过滤功能——在大菜单中直接输入文字就能筛选。

值得深挖的点

Find Navigator 的隐藏搜索能力

Find Navigator 看起来只是一个全局搜索框,但它实际上有四层筛选能力叠加。第一层是搜索框本身的文本匹配。第二层是底部过滤栏,可以在匹配结果中做二次过滤——比如你搜”padding”有几百个结果,可以在底部输入”SwiftUI”只看 SwiftUI 文件中的匹配。第三层是搜索范围(scope),你可以在搜索框下方的菜单中选择只搜索当前文件所在的目录或自定义目录组合,并且可以把常用范围保存下来。第四层是符号索引模式,把搜索从”文本匹配”切换到”符号匹配”,比如选”Descendant Types”可以看到某个类的完整继承层级。

一个很多人不知道的技巧:在搜索结果中,按住 Command 点击文件名左侧的展开箭头,可以折叠该文件的所有兄弟文件——让你快速定位到想看的文件而不被其他结果干扰。选中不关心的结果按 Delete 键可以临时隐藏它们(不会删除代码),让搜索结果更加聚焦。

Tab 管理和导航的效率组合拳

Xcode 的 tab 系统有一个很多人没意识到的设计:隐式 tab。当你通过跳转(比如 Command-点击符号定义)打开一个新文件时,Xcode 不会为你创建一个永久 tab,而是创建一个斜体标题的隐式 tab。当你跳转到下一个文件时,这个隐式 tab 会被替换。只有你主动在 tab 上双击或者从上下文菜单选择”Keep Open”,它才会变成永久 tab。

这个设计的好处是:你在追踪代码路径时不会产生大量 tab。但如果你需要同时参照两个文件,记得把当前 tab 固定下来。另外,Option 点击 tab 的关闭按钮可以一次性关闭除当前 tab 外的所有 tab——在你完成一个任务后清理工作区特别好用。

代码片段

这个 session 不涉及具体代码,而是 Xcode 的操作技巧。以下是关键快捷键和操作汇总。

导航类快捷键

Command-Shift-F        → 打开 Find Navigator(全局搜索)
Command-Shift-J        → 在 Project Navigator 中定位当前文件
Command-E              → 将选中文字放入搜索框(不覆盖剪贴板)
Control-点击后退按钮    → 查看完整的导航历史,直接跳转

坑点:Command-E 的行为是 macOS 系统级的,在任何 App 中都能用——不只是 Xcode。选中文本后按 Command-E,文本会进入查找缓冲区,之后用 Command-G 就能逐个跳转到下一个匹配。你的剪贴板内容不受影响。

Find Navigator 的高级操作

1. 搜索框输入关键词 → 获得匹配结果
2. 底部过滤栏输入额外关键词 → 在结果中二次筛选
3. 搜索框下方菜单选择 scope → 限定搜索目录
4. 点击搜索框上方 "Text" → 切换到符号索引模式
   - Descendant Types: 查看类继承层级
   - Callers: 查看谁调用了当前函数
5. 按住 Command 点击展开箭头 → 折叠兄弟文件
6. 选中结果按 Delete → 临时隐藏不关心的结果

Tab 和编辑器管理

双击 tab / 右键 "Keep Open"     → 将隐式 tab 变为永久 tab
Option-点击关闭按钮               → 关闭除当前 tab 外的所有 tab
编辑器右上角中间按钮              → 切换编辑器布局(Preview、Mini-map、Blame)
Jump Bar 点击任意层级             → 查看同级文件,输入文字可过滤
Related Files 菜单(左侧按钮)    → 查看最近文件、子类、调用者等符号关系

坑点:Mini-map 和 Blame 视图是通过编辑器右上角中间按钮的布局选项开启的,不是默认显示的。如果你习惯了 VS Code 的 mini-map,建议在 Xcode 中也打开这个功能。

最佳实践

如果你刚从其他 IDE 转到 Xcode,最先掌握的三个操作应该是:Command-Shift-F(全局搜索)、Command-Shift-J(定位当前文件)、以及 tab 的隐式/永久机制。这三个操作覆盖了日常开发中最常见的”找到代码”和”在文件间切换”两个场景。

对于有经验的 Xcode 用户,建议重新审视你的搜索工作流:你是否还在用搜索结果后手动翻找?试试底部过滤栏的二次筛选和搜索范围的保存功能。你是否还在逐个关闭 tab?试试 Option-点击关闭。这些小优化单个来看不起眼,但一天积累下来能省出不少时间。

还有什么值得关注

  • Git 集成在 Project Navigator 中可以直接按 git status 过滤文件,方便在提交前检查所有改动。
  • Xcode 的 break point 系统支持条件断点和日志断点,不需要修改代码就能添加调试输出。
  • Session 还提到了测试和分发的优化,但篇幅有限,更多细节见其他专题 session。
WWDC 2024