ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

XcodeGen 入门:用一份 YAML 配置生成你的 Xcode 工程

XcodeGen 入门:用一份 YAML 配置生成你的 Xcode 工程 XcodeGen 入门用一份 YAML 配置生成你的 Xcode 工程【免费下载链接】XcodeGenA Swift command line tool for generating your Xcode project项目地址: https://gitcode.com/GitHub_Trending/xc/XcodeGen手动维护 .xcodeproj 的人都知道那个流程往目录里丢一个新文件打开 Xcode右键拖进分组选对 target再处理重复路径告警。更麻烦的是切完分支工程里引用的文件可能已经不存在。XcodeGen 的思路相反工程文件不手写用一份 YAML 配置来定义 target、依赖和构建设置跑一条命令即可生成。配置进 Git工程文件进 .gitignore新文件下次生成时自动纳入。三分钟装好 XcodeGen前提macOS 且已安装最新稳定版 Xcode。四种方式按场景任选其一方式一行命令适用场景Homebrewbrew install xcodegen日常使用最省事Mintmint install yonaskolb/xcodegen已经用 Mint 管理 Swift 工具源码编译git clone https://gitcode.com/GitHub_Trending/xc/XcodeGen后进入目录执行make install要用最新特性或参与贡献SwiftPM 直接运行克隆仓库后执行swift run xcodegen临时验证不想全局安装推荐 Homebrew。其余方式只留一行命令备查源码方式克隆仓库地址见上表。最小可运行项目5 行配置新建目录放一份project.ymlname: MyDemo options: bundleIdPrefix: com.example targets: App: type: application platform: iOS deploymentTarget: 13.0 sources: [App]逐行说明name: MyDemo生成出来的工程名对应MyDemo.xcodeproj。bundleIdPrefix: com.example没单独写 bundle ID 的 target会自动拼成com.example.App。type: application产品类型为 iOS 应用每个 target 都要声明type和platform。deploymentTarget: 13.0最低支持版本。省略时使用 Xcode 的 SDK 默认值。sources: [App]源码目录递归收集其中所有文件相对project.yml所在目录解析。xcodegen generate它读取当前目录的project.yml在同目录生成MyDemo.xcodeproj成功时最后一行输出Created project at ...。验证在App/里新建一个 Swift 文件重新跑一次xcodegen generateXcode 导航面板里该文件应已自动出现且分组层级与磁盘目录一致。把项目做完整加一个测试 target目标让测试直接跑在应用进程里。关键配置targets: AppTests: type: bundle.unit-test platform: iOS sources: [AppTests] dependencies: - target: Appdependencies里指向主 targetXcodeGen 会自动配置TEST_HOST和TEST_TARGET_NAME。验证重新生成后切到Appscheme 跑一次测试测试 target 应出现在 scheme 的 Test 列表里。接入外部依赖目标引入一个第三方库让链接与嵌入全部自动完成。Swift Package 的写法是在项目级声明一次、target 级引用产品名packages: Yams: url: https://github.com/jpsim/Yams from: 2.0.0 targets: App: dependencies: - package: YamsCarthage 更简单- carthage: 框架名一行即可链接和copy-frameworks构建阶段由 XcodeGen 代劳。验证生成后打开 target 的 Frameworks, Libraries 区域应能看到对应库。自定义构建设置默认行为XcodeGen 会先按产品类型和平台注入一套预设等价于 Xcode 新建工程时的初始设置你的配置在其上叠加合并顺序为settingGroups→settings.base→settings.configsconfigFiles指向的 xcconfig 优先级最高。注意一个容易踩的规则同一个settings块里简单键值对不能和base/configs/groups混写混写时简单键值对会被静默忽略。settingGroups: signing: DEVELOPMENT_TEAM: ABC123XYZ targets: App: settings: groups: [signing] configs: Debug: DEBUG_MODE: YES验证Xcode 的 Build Settings 面板切到 Levels 模式确认各层取值符合预期。区分 Debug 与 Release 环境默认只为每个 target 生成一个 scheme。要固定出多套运行环境在顶层schemes里声明config决定该 scheme 固定用哪个构建设置schemes: App-Debug: build: targets: App: [Debug] App-Release: build: targets: App: [Release]验证重新生成后Xcode 的 scheme 下拉列表里应多出这两个 scheme。存量工程迁移让旧项目转由配置接管先说结论xcodegen dump只能从 spec 文件导出解析后的配置不能从 .xcodeproj 反推所以迁移靠手写这份project.yml旧工程留着当对照物。保留现有.xcodeproj在仓库根目录写project.yml先只描述主 target类型、平台、源码目录、外部依赖。跑xcodegen generate得到新工程文件用 Xcode 打开和旧工程逐个 target 比对 Build Settings签名相关DEVELOPMENT_TEAM、CODE_SIGN_STYLE没有专门选项直接写进settings。用xcodegen dump --type yaml加--file out.yml可写入文件查看完整解析结果核对 include、模板合并后的最终形态。确认无误后把.xcodeproj加入.gitignore配置从此进版本控制。完整键位见 配置规范常用选项说明见 Usage。三个高频坑现象磁盘上新增的文件在 Xcode 里看不见。原因工程文件不会自动感知磁盘变化文件引用是生成那一刻写死的。一行修复xcodegen generate。现象切换分支后编译报 Build input file cannot be found。原因新分支的新旧文件没有参与过生成。一行修复在post-checkout钩子里执行xcodegen generate --use-cache--use-cache会在无变化时跳过生成。现象settings里写的 Debug/Release 值没生效。原因简单键值对与base/configs/groups混写简单键值对被静默忽略。一行修复统一放进configs或base例如configs: {Debug: {XXX: YES}}。结尾XcodeGen 把工程结构从一份会冲突的二进制文件变成一段可读、可 diff、可随时重建的 YAML。现在挑一个手头的小工程写第一份project.yml跑一条xcodegen generate从下次加文件开始省心。【免费下载链接】XcodeGenA Swift command line tool for generating your Xcode project项目地址: https://gitcode.com/GitHub_Trending/xc/XcodeGen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进