TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 780 subscribers
Post #1877 3
Xcode 27.2 改用 JSON 项目格式

Xcode 27.2 用基于 JSON 的 project.xcproj 取代了沿用多年的 project.pbxproj。新建项目默认使用新格式,已有项目不会自动转换,两种格式可以并存。Xcode 27.0 和 27.2 都能打开 JSON 项目,Xcode 26 不行。

旧格式基于 NeXTSTEP 时代的 plist 语法,把项目存成一张扁平的对象表,对象之间靠随机十六进制 ID 互相引用。新增一个 Swift 文件,Xcode 要同时写 PBXFileReference、PBXBuildFile、PBXGroup 和 PBXSourcesBuildPhase 四处,ID 每次重新生成,多人分支上改同一批位置就会撞出经典的合并冲突。构建配置也是每个 configuration 各存一份完整副本,改一次部署目标要动两处。
新格式按 Xcode 界面里的结构组织,拆成 files、targets、build-settings 等区块,diff 看起来就是你在界面上做的事。最关键的改动是文件自己声明归属的 target,写成 "target-membership": ["Weather/compile-sources"],不再涉及 UUID,加文件变成一处一行。构建配置相同的只写一次,Debug 和 Release 不同时用 [config=...] 条件区分,和 .xcconfig 的写法一致。一次真实迁移中,161 行 XCBuildConfiguration 缩成一个 build-settings 块,整个文件从 300 行 property list 变成 123 行 JSON。ID 只在 target 和构建产物上保留,其余按名称或路径引用。
需要注意这个格式允许尾随逗号,普通 JSON.parse 读不了,Apple 的开源库用 JSON5 编码处理,写脚本时要用能容忍 JSON5 的解析器,别用 jq。切换方式有两种:在 Xcode 里选中项目,打开 File inspector(Option-Command-1),把 Project Document 下的 Project Format 设为 JSON;命令行可以用 xcodebuild -project MyApp.xcodeproj -convert-project "Xcode Project",适合 CI 或批量转换。转换会删除 project.pbxproj,建议单独提交、不带其他改动,方便审查和回滚。

Xcode 27.2 还在 /usr/bin 里带了 xcprojformatter,用于校验和重排已使用 xcproj 的文件,它不是 pbxproj 转换器,可以理解为项目文件版的 swift-format,适合加进 CI 防止手工或 AI 编辑破坏规范格式。Apple 同时开源了 Swift 库 xcode-project-format,供生成器、linter、校验器直接读写该格式。

直接解析 project.pbxproj 的工具都需要更新,包括通过 xcodeproj gem 的 CocoaPods、改版本号或设置的 fastlane action、项目生成器和自定义脚本。Swift XcodeProj 库已有实验性支持,9.17.0 版本于 2026 年 9 月 17 日加入,维护者提示细节仍会变化,提交前先检查转换结果。Capacitor 尚未支持,cap sync ios 目前只解析 .pbxproj。Tuist、XcodeGen、Bazel、SwiftPM 和基于 xcconfig 的工作流不受影响,可按自己的节奏迁移。

Apple 把这次公告归在 Coding Intelligence 下,明确表示新格式让编码 agent 更容易处理 Xcode 项目:改一个设置只需编辑一行可读文本,而不是更新多处 ID 交叉引用,出错的可能性大幅减少。
More from @devtoolboxhub
  1. Sep 26, 2026五仓库架构踩坑:Gitlink 与双 CI Flude 团队复盘了多仓库架构的实践代价。项目从第一分钟起就选择拆分成独立仓库,Pipeline、engine、design-docs…
  2. Sep 26, 2026Xeno Core:TypeScript 后端架构框架 Node.js 复杂系统的架构选型往往决定代码的长期命运。开发者常在两条路之间纠结:要么依赖重度使用实验性装饰器和反射(如…
  3. Sep 25, 2026用 SLO 给 AI Agent 的行为定个预算 Grafana Labs 提出把可靠性工程里的错误预算(error budget)思路用到 AI Agent 上。延迟、token…
  4. Sep 25, 2026PostgreSQL 的 max_prepared_transactions 该不该开 prepared transaction 是脱离会话独立存在的两阶段提交事务。执行 PREP…
  5. Sep 24, 2026RPI 实战:用 Claude Code 子代理拆分研发流程 一个约十几个产品的小团队(helpdesk、MES、邮件托管、高校 AI 助手)在 monorepo 里日常使用 Cl…
  6. Sep 24, 2026云原生架构下的依赖模拟工具问题 当前主流依赖模拟工具并非针对云原生架构设计。这些工具诞生于服务有固定发布周期、上游依赖变更缓慢且明确、测试团队可清晰掌握依赖行为的时代,而云原生架构…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →