XcodeGen 上手指南:一份 YAML 生成整个 Xcode 工程
XcodeGen 上手指南一份 YAML 生成整个 Xcode 工程【免费下载链接】XcodeGenA Swift command line tool for generating your Xcode project项目地址: https://gitcode.com/GitHub_Trending/xc/XcodeGen先说个熟悉的场景。你往项目里加了一个 Swift 文件得在 Xcode 里把它拖进正确的 group队友同时改了工程结构一合并.xcodeproj里一片红色冲突得手动一行行对。删个文件Xcode 还留着引用构建时才发现路径断了。这些活有个共同点工程文件本可以由目录结构和一份声明推导出来却被手动维护成了负担。XcodeGen 就是干这个的。它是一个用 Swift 写的命令行工具你写好一份 YAML或 JSON配置它读你的目录结构自动生成MyProject.xcodeproj。配置文件进 git工程文件不进了——冲突从根上消失。它是什么一份声明换掉整个工程文件一句话XcodeGen 把工程长什么样变成可读的文本按你的描述重新生成而不是让你手维护二进制工程文件。它能覆盖的能力面先扫一眼细节后文再拆能力它替你做什么从 spec 生成工程一条命令产出.xcodeproj按需生成目录自动同步分组和文件始终对齐磁盘结构不用手动拖免合并冲突.xcodeproj移出版本控制只留声明构建设置分层预设、设置组、xcconfig 三层复用多环境 Scheme测试、生产等环境各生成一份 Scheme依赖集成target、Carthage、SPM、SDK、framework 五类配置拆分一个 spec 拆成多个文件可 include、可覆盖最短路径三步跑通第一步装它。任选其一brew install xcodegen # 或 mint install yonaskolb/xcodegen第二步写最小配置。在项目根目录建project.yml。XcodeGen 默认找当前目录的这份文件name: MyProject options: bundleIdPrefix: com.myapp targets: MyApp: type: application platform: iOS deploymentTarget: 15.0 sources: [MyApp]sources指向你的源码目录。文件不用一个个列XcodeGen 会自动解析这个目录并保留文件夹层级。第三步生成。xcodegen generate完成后会得到MyProject.xcodeproj名字取自name字段双击就能在 Xcode 打开。这就是最短闭环声明 → 生成 → 打开三步没有任何手动拖拽。几个常用开关--spec指定配置文件路径--project指定生成位置--use-cache让内容没变化时跳过重新生成。配置怎么分层够用、进阶、组合配置不用一次写全。按你的真实需要分三层往上加。第一层够用的默认值。XcodeGen 已经替你铺好了大部分——Debug/Release 配置、各平台的默认构建设置、bundle id由bundleIdPrefix 目标名拼出。多数项目第一层就够跑。第二层复用设置组。多个 target 共享同一套设置时用settingGroups抽出来。它和settings的base基础值、configs按配置取值能叠在一起settingGroups: team: DEVELOPMENT_TEAM: T45H45J targets: App: settings: groups: [team] base: CODE_SIGN_ENTITLEMENTS: App/Entitlements.entitlements configs: Debug: DEBUG_MODE: YESXcode 解析构建设置是分层的target → target 的 xcconfig → project → project 的 xcconfig → SDK 默认。你也能用configFiles挂.xcconfig文件它的优先级又高一层。完整的层级关系见 Docs/Usage.md。第三层拆文件、套模板。大项目把一份 spec 拆成多个文件用include引入按顺序合并当前文件覆盖在前。想整块替换某个值而不是追加给 key 加:REPLACE后缀include: - base.yml targets: MyTarget: sources:REPLACE: - my_new_sources依赖也是第三层常碰的。target 的dependencies支持五类各占一行target工程内目标、carthage、framework本地路径、sdk系统框架如Contacts.framework、packageSPM先在项目级packages声明再引用。Carthage 不用你手动建 copy-frameworks 阶段XcodeGen 自动处理。细节看 Docs/Usage.md 和 Docs/ProjectSpec.md。把它放进日常协作、CI、老工程迁移多人协作。把.xcodeproj加进.gitignore只提交project.yml。冲突从工程文件的二进制差异变成YAML 文本差异好合并得多。切分支时文件可能有增删工程会过期。建议在 git 钩子里自动重生成这一步官方 FAQ 有明确推荐Docs/FAQ.mdpost-checkout、post-rewrite、post-merge里跑xcodegen generate --use-cachepre-commit里跑xcodegen cache刷新缓存--use-cache的关键作用内容没变就不重新生成钩子不会每次都白跑一遍。CI 里。机器上不一定有现成工程正好让它现生成。把生成和构建写进流水线xcodegen generate xcodebuild -project MyProject.xcodeproj -scheme MyApp build老工程怎么迁。说句实话XcodeGen 不能直接读你现有的.xcodeproj反推出配置。迁移的正路是正向补一份 spec——先写一份能跑的最简 specsources指向你现有的源码目录文件清单让它自动解析。用xcodegen dump看解析结果对不对这是排障利器支持summary、yaml、json等输出xcodegen dump --type summary # 先看目标清单 xcodegen dump -t yaml # 导出解析后的完整 spec对着 dump 的结果逐个补targets、settings、dependencies直到和老工程行为一致再切过去。你会撞上的坑以及怎么解签名不生效。XcodeGen 没有专门的签名选项走普通构建设置在设置里设DEVELOPMENT_TEAM必要时加CODE_SIGN_STYLE。见 Docs/FAQ.md。用了 CocoaPods。照常写Podfile生成后跑一次pod install集成。配合--use-cache和options.postGenCommand: pod install只在真正重新生成时才装一次。SPM 依赖对不上版本。SPM 不支持 Debug/Release 以外的自定义配置要锁定版本把ProjectName.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved提交进仓库。构建设置写不进。你填的是设置的真实名字和值不是 Xcode 里美化后的标题。在 Build Settings 面板里打开Show Setting Titles和Show Definitions看到的就是 XcodeGen 期望的原始名称。接下来去哪收益很直接工程文件不再靠人肉维护新文件复制粘贴即生效分支切换不再炸冲突。想继续深挖三个入口全字段参考Docs/ProjectSpec.md用法与场景Docs/Usage.md真实项目 spec 示例Docs/Examples.md下一篇你可以试着把手头的工程用一份project.yml重新描述一遍——写到一半你会意识到手动维护那些文件有多多余。【免费下载链接】XcodeGenA Swift command line tool for generating your Xcode project项目地址: https://gitcode.com/GitHub_Trending/xc/XcodeGen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考