Xcode 的 Build Settings 是分层的:同一个设置可以在默认值、xcconfig 文件、工程(Project)、目标(Target)几层分别写,最终生效的是优先级最高那一层的值。看懂它的关键是「层级(Levels)」视图:每一层写了什么、最后解析出来的是什么,一眼就能看出哪一层覆盖了谁。在 VS Code 里装好免费插件快蝎(KXApp),打开工程设置就能看到和 Xcode 一样的「通用」「构建设置」页和层级视图,也能直接修改。这篇讲层级的继承关系、怎么在 VS Code 里查看和修改,以及最常用的十几个设置,截至 2026 年 10 月,适用 Xcode 16 及以上。
开始前准备:Mac 上已安装 Xcode,VS Code 或 Cursor 里装好快蝎插件(扩展视图搜索 kxapp,详见安装页),并打开了你的 Xcode 工程文件夹。
层级和继承关系
优先级从高到低:
| 层级 | 写在哪里 | 说明 |
|---|---|---|
| 目标(Target) | project.pbxproj 里这个 target 的设置 |
只影响这个 target,优先级最高 |
| 目标的 xcconfig | target 指定的 .xcconfig 文件 |
多个 target 或多人共用设置时常用 |
| 工程(Project) | project.pbxproj 里工程级的设置 |
对所有 target 生效,除非 target 另写 |
| 工程的 xcconfig | 工程指定的 .xcconfig 文件 |
工程级的共用设置 |
| 默认(iOS Default) | Xcode 内置 | 什么都没写时用它 |
上一层没写时继承下一层;写了就覆盖。值里写 $(inherited) 表示「在下一层的值基础上追加」,常见于 OTHER_LDFLAGS、HEADER_SEARCH_PATHS 这类列表设置。每一层还可以按构建配置(Debug / Release)分别写不同的值。
完整说明见 Apple 文档 Build settings reference。
在 VS Code 里打开工程设置
三种方式都可以:
- 在 Xcode 工程视图里右键工程,选「编辑工程设置」;右键某个 target,选「编辑目标设置」。
- 在资源管理器里打开
project.pbxproj,会用工程设置编辑器打开。 - 命令面板运行「kxapp: 工程设置…」。
编辑器分「通用」(General)和「构建设置」(Build Settings)两页。通用页是标识、部署信息、签名等常用项。

用层级视图找出生效的值
切到「构建设置」页,在左侧「工程」「目标」两栏里选要看的工程或 target,再选「层级」视图:每个设置一行,列出最终的「解析值」,以及目标、目标 xcconfig、工程、工程 xcconfig、默认几层各自的值(看工程这一层时只有工程 xcconfig、工程、默认三层)。哪一层有值、哪一层覆盖了谁,一眼就能看清。

顶部有两组按钮,另有「配置」下拉和「搜索构建设置」框:
- 筛选「基本」/「已自定义」/「全部」:「基本」只看常用设置,「全部」看全部设置;「已自定义」只看当前这一层(目标或工程)写了值的设置,排查「谁改了这个设置」最快。
- 视图「合并」/「层级」:「合并」只看每个设置最终的值(「设置」「解析值」两列),和 Xcode 的 Combined 一样;「层级」就是上面的逐层视图。
- 「配置」下拉(所有配置 / Debug / Release,工程有多个构建配置时显示):Debug 和 Release 的值不同时,分别查看。
修改设置
- 直接改值;枚举类型的设置用下拉框选,和 Xcode 一样。
- 可以只改某个构建配置(如只改 Release),也可以所有配置一起改。
- 右键选「添加用户自定义设置」,加自己的设置名,代码或 Info.plist 里用
$(MY_SETTING)引用。 - 不需要的值右键「删除设置」,恢复为继承下一层;「复制设置名」「复制值」方便贴到文档或 xcconfig 里。
保存时只改动你改过的设置,用 git diff 能清楚看到改了哪几行。
修改工程设置需要 xcodeproj 组件:第一次用到时插件会提示一键安装,也可以在终端运行 gem install --user-install xcodeproj。用 rbenv、rvm 管理 Ruby 时,把对应 ruby 的路径填进设置 kxapp.rubyPath。
常用设置速查
| 设置名 | 界面上的名字 | 含义 |
|---|---|---|
PRODUCT_BUNDLE_IDENTIFIER |
Product Bundle Identifier | Bundle ID,App 的唯一标识,要和描述文件一致 |
PRODUCT_NAME |
Product Name | 产物名,默认也是 App 显示名的来源 |
MARKETING_VERSION |
Marketing Version | 版本号(如 1.2.0),对应 Info.plist 的 CFBundleShortVersionString |
CURRENT_PROJECT_VERSION |
Current Project Version | 构建号,对应 CFBundleVersion,每次上传要递增 |
IPHONEOS_DEPLOYMENT_TARGET |
iOS Deployment Target | 最低支持的 iOS 版本 |
TARGETED_DEVICE_FAMILY |
Targeted Device Families | 支持 iPhone、iPad 还是两者 |
CODE_SIGN_STYLE |
Code Signing Style | Automatic 自动签名 / Manual 手动签名 |
DEVELOPMENT_TEAM |
Development Team | 签名用的团队 ID |
CODE_SIGN_ENTITLEMENTS |
Code Signing Entitlements | entitlements 文件路径 |
INFOPLIST_FILE |
Info.plist File | Info.plist 文件路径 |
SWIFT_VERSION |
Swift Language Version | Swift 语言模式(如 5、6) |
SWIFT_ACTIVE_COMPILATION_CONDITIONS |
Active Compilation Conditions | 条件编译标记,如 Debug 下的 DEBUG |
OTHER_LDFLAGS |
Other Linker Flags | 额外的链接参数,如 -ObjC |
ENABLE_BITCODE 等旧设置 |
— | 新版 Xcode 已不再使用,可以删掉 |
常见问题
改了设置但构建结果没变?
先在层级视图里看「解析值」是不是你改的那个:很可能更高一层(比如 target)另写了值把它覆盖了。确认无误后,用 Xcode 工程视图「…」里的「清理构建目录」再构建。
Debug 和 Release 的值为什么不一样?
每一层都可以按构建配置分别写。在「构建设置」页用「配置」下拉分别查看,或修改时选「所有配置」让两者一致。
在 VS Code 里改的设置,Xcode 能看到吗?
能。改的就是同一个 project.pbxproj,格式和 Xcode 写出来的一致,回到 Xcode 打开完全一样。
保存时报错怎么办?
多半是缺少 xcodeproj 组件。在终端运行 ruby -e 'require "xcodeproj"' 报错时,运行插件命令「安装 xcodeproj Ruby gem」或 gem install --user-install xcodeproj,详见问题排查。