|
| 1 | +<p align="center"> |
| 2 | +<a href="https://github.com/yonaskolb/XcodeGen"> |
| 3 | +<img src="Assets/Logo_animated.gif" alt="XcodeGen" /> |
| 4 | +</a> |
| 5 | +</p> |
| 6 | +<p align="center"> |
| 7 | + <a href="https://github.com/yonaskolb/XcodeGen/releases"> |
| 8 | + <img src="https://img.shields.io/github/release/yonaskolb/xcodegen.svg"/> |
| 9 | + </a> |
| 10 | + <a href="https://swiftpackageindex.com/yonaskolb/XcodeGen"> |
| 11 | + <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fyonaskolb%2FXcodeGen%2Fbadge%3Ftype%3Dplatforms" alt="Swift Package Manager Platforms" /> |
| 12 | + </a> |
| 13 | + <a href="https://swiftpackageindex.com/yonaskolb/XcodeGen"> |
| 14 | + <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fyonaskolb%2FXcodeGen%2Fbadge%3Ftype%3Dswift-versions" alt="Swift Versions" /> |
| 15 | + </a> |
| 16 | + <a href="https://github.com/yonaskolb/XcodeGen/blob/master/LICENSE"> |
| 17 | + <img src="https://img.shields.io/github/license/yonaskolb/XcodeGen.svg"/> |
| 18 | + </a> |
| 19 | +</p> |
| 20 | + |
| 21 | +# XcodeGen |
| 22 | + |
| 23 | +XcodeGen 是一个用 Swift 编写的命令行工具,它通过读取你的文件夹结构和项目配置(YAML 或 JSON格式)来生成 Xcode 工程项目。 |
| 24 | + |
| 25 | +该配置文件可以定义 targets、build configurations、schemes、自定义构建参数等。所有源码目录会被自动解析、引用,同时保持目录结构不变。工具也为大多数配置提供合理默认值,因此你只需关注需要自定义的部分。对于复杂项目,也可以使用更高级的特性进行配置。 |
| 26 | + |
| 27 | +- ✅ 按需生成项目并将 .xcodeproj 从 Git 中移除,**彻底告别合并冲突**! |
| 28 | +- ✅ Xcode 中的分组和文件始终与磁盘上的目录保持**同步** |
| 29 | +- ✅ 项目**配置**简洁易读,适合团队协作和 Git 管理 |
| 30 | +- ✅ 可以轻松复制粘贴、**文件和文件夹**,无需在 Xcode 中手动添加 |
| 31 | +- ✅ 通过**构建设置组**在多个目标之间共享构建设置 |
| 32 | +- ✅ 为测试、生产等**多种不同环境**自动生成 schemes |
| 33 | +- ✅ 可以按需快速**创建新项目**,无需繁琐操作 Xcode |
| 34 | +- ✅ 可在任意位置运行生成命令,包括**CI**环境 |
| 35 | +- ✅ 支持将项目配置拆分成多个文件,方便**分享**和覆盖 |
| 36 | +- ✅ 轻松创建**多平台**框架 |
| 37 | +- ✅ 无需额外操作即可集成**Carthage**依赖库 |
| 38 | + |
| 39 | +给出一个示例项目配置: |
| 40 | + |
| 41 | +```yaml |
| 42 | +name: MyProject |
| 43 | +include: |
| 44 | + - base_spec.yml |
| 45 | +options: |
| 46 | + bundleIdPrefix: com.myapp |
| 47 | +packages: |
| 48 | + Yams: |
| 49 | + url: https://github.com/jpsim/Yams |
| 50 | + from: 2.0.0 |
| 51 | +targets: |
| 52 | + MyApp: |
| 53 | + type: application |
| 54 | + platform: iOS |
| 55 | + deploymentTarget: "10.0" |
| 56 | + sources: [MyApp] |
| 57 | + settings: |
| 58 | + configs: |
| 59 | + debug: |
| 60 | + CUSTOM_BUILD_SETTING: my_debug_value |
| 61 | + release: |
| 62 | + CUSTOM_BUILD_SETTING: my_release_value |
| 63 | + dependencies: |
| 64 | + - target: MyFramework |
| 65 | + - carthage: Alamofire |
| 66 | + - framework: Vendor/MyFramework.framework |
| 67 | + - sdk: Contacts.framework |
| 68 | + - sdk: libc++.tbd |
| 69 | + - package: Yams |
| 70 | + MyFramework: |
| 71 | + type: framework |
| 72 | + platform: iOS |
| 73 | + sources: [MyFramework] |
| 74 | +``` |
| 75 | +者将会创建一个包含两个关联目标 target 的项目,并带有所有必要的配置和构建设置。 |
| 76 | +详细可配置项请参考 [Project Spec](Docs/ProjectSpec.md) 文档,更多通用使用说明请查阅 [Usage](Docs/Usage.md) 文档。 |
| 77 | +
|
| 78 | +## 安装方法 |
| 79 | +
|
| 80 | +请确保已安装最新的稳定版(非测试版)Xcode |
| 81 | +
|
| 82 | +### 使用[Mint](https://github.com/yonaskolb/mint) |
| 83 | +```sh |
| 84 | +mint install yonaskolb/xcodegen |
| 85 | +``` |
| 86 | + |
| 87 | +### 使用 Make |
| 88 | + |
| 89 | +```shell |
| 90 | +git clone https://github.com/yonaskolb/XcodeGen.git |
| 91 | +cd XcodeGen |
| 92 | +make install |
| 93 | +``` |
| 94 | + |
| 95 | +### 使用Homebrew |
| 96 | + |
| 97 | +```shell |
| 98 | +brew install xcodegen |
| 99 | +``` |
| 100 | + |
| 101 | +### 使用 Swift Package Manager |
| 102 | + |
| 103 | +**作为命令行工具使用(CLI** |
| 104 | + |
| 105 | +```shell |
| 106 | +git clone https://github.com/yonaskolb/XcodeGen.git |
| 107 | +cd XcodeGen |
| 108 | +swift run xcodegen |
| 109 | +``` |
| 110 | + |
| 111 | +**作为依赖使用** |
| 112 | + |
| 113 | +在你的 Package.swift 文件的 dependencies 中添加以下内容: |
| 114 | + |
| 115 | +```swift |
| 116 | +.package(url: "https://github.com/yonaskolb/XcodeGen.git", from: "2.44.1"), |
| 117 | +``` |
| 118 | + |
| 119 | +然后在需要的地方导入: `import XcodeGenKit` |
| 120 | + |
| 121 | +## 使用方法 |
| 122 | + |
| 123 | +只需运行: |
| 124 | + |
| 125 | +```shell |
| 126 | +xcodegen generate |
| 127 | +``` |
| 128 | + |
| 129 | +这将在当前目录中查找名为 `project.yml` 的项目配置文件,并根据其中定义的名称生成对应的 Xcode 工程。 |
| 130 | + |
| 131 | +可选参数: |
| 132 | + |
| 133 | +- **--spec**: 可选参数,指定 `.yml` 或 `.json` 格式的项目配置文件路径,默认为 `project.yml`。也可以用逗号分隔多个配置文件路径(注意:其余参数会共享) |
| 134 | +- **--project**: 可选参数,指定生成项目的输出目录,默认为配置文件所在目录。 |
| 135 | +- **--quiet**: 静默模式,抑制信息和成功提示消息。 |
| 136 | +- **--use-cache**: 启用缓存机制,防止不必要的项目重新生成。如果启用该选项,当配置文件和引用的所有文件没有变动时,`xcodegen` 将跳过生成过程。 |
| 137 | +- **--cache-path**: 自定义缓存文件路径,默认路径为 `~/.xcodegen/cache/{PROJECT_SPEC_PATH_HASH}` |
| 138 | + |
| 139 | +This uses Swift Package Manager to create an `xcodegen dump` 用于以多种格式输出解析后的配置文件,或将其写入文件。执行 `xcodegen help` 可查看更多详细命令说明。 |
| 140 | + |
| 141 | +## 编辑项目 |
| 142 | +```shell |
| 143 | +git clone https://github.com/yonaskolb/XcodeGen.git |
| 144 | +cd XcodeGen |
| 145 | +swift package generate-xcodeproj |
| 146 | +``` |
| 147 | +该命令使用 Swift Package Manager 生成一个 `xcodeproj` 文件,你可以在 Xcode 中打开它以进行编辑和运行,从而更方便地修改项目源码。 |
| 148 | + |
| 149 | +如果你希望在 Xcode 中运行时传入参数,可以在 Scheme 设置中添加启动参数。 |
| 150 | + |
| 151 | +## 文档说明 |
| 152 | +- 查看 [Project Spec](Docs/ProjectSpec.md) 文档,了解所有可设置的属性与选项 |
| 153 | +- 查看 [Usage](Docs/Usage.md) 文档,获取更具体的使用方法与应用场景 |
| 154 | +- 查看 [FAQ](Docs/FAQ.md) 以了解常见问题解答 |
| 155 | +- 查看 [Examples](Docs/Examples.md),了解一些真实项目中使用 XcodeGen 的配置示例 |
| 156 | + |
| 157 | +## 替代工具 |
| 158 | +如果 XcodeGen 无法满足你的需求,可以尝试以下优秀的替代工具: |
| 159 | +- [Tuist](https://github.com/tuist/tuist) |
| 160 | +- [Xcake](https://github.com/igor-makarov/xcake) |
| 161 | +- [struct](https://github.com/workshop/struct) |
| 162 | + |
| 163 | +## 致谢 |
| 164 | +本工具基于以下项目构建: |
| 165 | + |
| 166 | +- [XcodeProj](https://github.com/tuist/XcodeProj) |
| 167 | +- [JSONUtilities](https://github.com/yonaskolb/JSONUtilities) |
| 168 | +- [Spectre](https://github.com/kylef/Spectre) |
| 169 | +- [PathKit](https://github.com/kylef/PathKit) |
| 170 | +- [Yams](https://github.com/jpsim/Yams) |
| 171 | +- [SwiftCLI](https://github.com/jakeheis/SwiftCLI) |
| 172 | + |
| 173 | +本项目的灵感来自: |
| 174 | + |
| 175 | +- [struct](https://github.com/workshop/struct) |
| 176 | +- [Xcake](https://github.com/igor-makarov/xcake) |
| 177 | +- [CocoaPods Xcodeproj](https://github.com/CocoaPods/Xcodeproj) |
| 178 | + |
| 179 | +## 贡献 |
| 180 | +欢迎提交 Pull Request 和 Issue。如果你发现 bug、有新功能建议,或希望改进文档,欢迎随时提出 Issue 或提交 PR。 |
| 181 | + |
| 182 | +[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/0)[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/1)[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/2)[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/3)[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/4)[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/5)[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/6)[](https://sourcerer.io/fame/yonaskolb/yonaskolb/XcodeGen/links/7) |
| 183 | + |
| 184 | +## License |
| 185 | + |
| 186 | +XcodeGen is licensed under the MIT license. See [LICENSE](LICENSE) for more info. |
0 commit comments