Objective-C 工程和 Swift / Objective-C 混编工程都可以在 VS Code 里开发:装上免费插件快蝎(KXApp),打开 Xcode 工程后,.m、.h 和 .swift 文件都有代码补全和跳转;按 ⌘R 构建并运行到模拟器或 iPhone,在 Objective-C 和 Swift 代码里都能打断点、用 po 打印对象,NSLog 输出也能在 VS Code 里看到。这篇讲混编工程需要注意的几处设置和常见问题,截至 2026 年 10 月,适用 Xcode 16 及以上。
开始前准备:Mac 上已安装 Xcode 并打开过一次,工程在 Xcode 里能正常构建。还没装插件的按安装页操作。
能做什么
| 能力 | Objective-C | Swift | 说明 |
|---|---|---|---|
| 代码补全、跳转定义、查找引用 | ✓ | ✓ | 三方 framework 的头文件也能跳转 |
| 实时报错 | ✓ | ✓ | 编译错误另外进「问题」面板 |
| 断点、条件断点、日志断点 | ✓ | ✓ | 模拟器和 iPhone 真机都可以 |
调试控制台 po、bt |
✓ | ✓ | po 打印对象的 description |
| 日志输出 | NSLog |
print |
都在「输出 › kxapp Console」 |
| 单元测试 | ✓ | ✓ | XCTest 用例都在测试面板里 |
第一步:让 .h 文件按 Objective-C 显示
VS Code 默认把 .h 文件当成 C++。补全不受影响,但 Objective-C 的语法高亮会不对。在设置(JSON)里加上:
1"files.associations": { "*.h": "objective-c" }
可以放在用户设置里,也可以放在工程的 .vscode/settings.json 里,只对这个工程生效。
第二步:Swift 调 Objective-C、Objective-C 调 Swift
混编工程的补全和 Xcode 里一样依赖两个文件:
| 方向 | 依赖 | 在 VS Code 里要注意 |
|---|---|---|
| Swift 调用 Objective-C | 桥接头文件(<工程名>-Bridging-Header.h)里 #import 的头文件 |
改了桥接头文件后,Swift 文件里的补全会跟着更新;没更新时按 ⌘B 构建一次 |
| Objective-C 调用 Swift | 构建时生成的 <模块名>-Swift.h |
这个头文件构建后才有。新工程第一次打开时插件会在后台构建一次,后台构建完成后 #import "xxx-Swift.h" 就不再报错 |
新加了要给 Objective-C 用的 Swift 类或方法(@objc)后,构建一次,Objective-C 那边的补全才能看到它们。
第三步:运行和断点调试
- 点状态栏的 Scheme 和运行目标,选模拟器或连着的 iPhone。
- 在
.m或.swift文件的行号左侧点一下设断点。 - 按 ⌘R,插件构建、安装、启动 App 并接上调试器。
断点停下后,左侧调试视图里看局部变量和调用栈;在调试控制台输入:
po self、po someArray:打印 Objective-C 对象(调用它的description)。bt:打印当前线程的调用栈。
只有二进制、没有源码的第三方 framework,单步时会跳过它的内部实现,这和 Xcode 一致。

看 NSLog 输出
调试或「运行(不调试)」时,App 的 NSLog 输出(包括三方 framework 打的日志)和 Swift 的 print 一起出现在「输出」面板的 kxapp Console 通道里。真机和模拟器都可以。
常见问题
.h 文件里 Objective-C 语法高亮不对怎么办?
在设置里加 "files.associations": { "*.h": "objective-c" }。VS Code 默认把 .h 当 C++,补全本身不受影响。
Objective-C 里 #import “xxx-Swift.h” 报找不到?
这个头文件是构建时生成的。按 ⌘B 构建一次,或等插件第一次打开工程时的后台构建完成,报错就会消失。
装了 clangd 扩展后补全出现两份?
两个扩展同时在处理 C / Objective-C 文件。停用其中一个;或者想让 clangd 负责 C / C++ 时,在设置 kxapp.swiftSourcekitLspSupportedLanguages 里去掉对应语言。
纯 Objective-C 的老工程能用吗?
能。Xcode 能打开的 .xcodeproj / .xcworkspace 都支持,和是否用 Swift 无关。