在 macOS 上用 Xcode 配置多 Target 是通过复制重命名 Target、分离 Info.plist 和 Bundle ID、添加预处理宏、按 Target 管理资源和代码,实现同一套代码产出多个独立 App。
在 macos 上用 xcode 配置多 target,本质是让同一套代码产出多个独立 app(比如 dev、uat、prod 版本),每个版本可拥有不同 bundle id、显示名、图标、启动图,甚至运行时逻辑。关键不在于“新建多个项目”,而是复用源码,通过 target 切换配置。
复制并重命名 Target
选中当前主 Target(如 MyApp),右键 → Duplicate。Xcode 会生成一个 MyApp copy。立即重命名它(例如 MyApp-Dev),回车确认。同理,在顶部 Scheme 下拉菜单中点击 Manage Schemes,把新 Scheme 名也改为 MyApp-Dev,保持一致便于识别。
分离 Info.plist 和 Bundle ID
复制 Target 后,Xcode 默认仍指向原 Info.plist。需为新 Target 单独准备配置文件:
- 在 Finder 中复制一份原 Info.plist,重命名为 Info-Dev.plist
- 拖入项目中(勾选 Add to targets,只勾选新 Target)
- 选中新 Target → Build Settings → 搜索 Info.plist → 修改 Info.plist File 路径为 MyApp/Info-Dev.plist
- 在同一页面修改 Product Bundle Identifier(如从 com.example.app 改为 com.example.app.dev)
- 修改 Product Name 和 Display Name(如设为 MyApp Dev)
添加预处理宏区分环境
让代码感知当前构建的是哪个 Target:
- OC 项目:在新 Target 的 Build Settings 中搜索 Preprocessor Macros → 在 Debug 和 Release 配置下分别添加 DEV=1
- Swift 项目:搜索 Other Swift Flags → 添加 -D DEV(注意 -D 不可省略)
- 代码中即可用条件编译:
#if DEV<br> let baseURL = "https://dev.api.example.com"<br>#else<br> let baseURL = "https://api.example.com"<br>#endif
按 Target 管理资源和代码
不同 Target 可包含不同资源或排除部分文件:
- 选中图片、LaunchScreen.storyboard 等资源 → 右侧 Target Membership 面板 → 取消勾选不需要该资源的 Target
- 新建 AppIcon 图标集 → 选中该资源集 → 在 Target Membership 中仅勾选对应 Target
- 若某段调试专用代码只在 Dev Target 编译,可在文件顶部加 #if DEV … #endif,或直接将该 .m/.swift 文件从 Prod Target 的 Compile Sources 列表中移除


















