简介
我最初对它感兴趣,因此前几天在学习会议上听说了XcodeGen的LT,因此决定触摸它。
触摸后,我想将其引入业务。
"项目文件不冲突"的功能是多人开发中的一大优势。
什么是" XcodeGen"?
由Swift制作的命令行工具,可从定义文件(
通过在YAML中写入项目设置,将自动生成项目文件。
这样就无需自己编辑项目文件。
XcodeGen除了"自动生成项目文件"外什么也不做,因此,如果您理解了这一点,将会更容易理解其好处和将来的解释。
词汇表
在本文中,术语定义如下。
-
项目文件
.xcodeproj 指向文件 -
工作区
.xcworkspace 指向文件
使用CocoaPods时需要 -
定义文件
指向project.yml
正式称为"项目规范"
XcodeGen
的好处
介绍引入XcodeGen的好处。
项目文件不再冲突
我认为毫不夸张地说这是最大的优点。
每个人在由多人开发iOS应用程序时遇到的"由添加文件引起的项目文件冲突"将不再发生。
原因是,如果在定义文件中使用
project.yml
1 2 3 4 | targets: Foo: sources: - Foo # 「Foo」フォルダ内のファイルが自動的に追加される |
换句话说,您不需要仅通过添加,重命名或删除文件来更改定义文件。
项目树自动排序
根据实际文件路径自动生成项目树。
那时,它会按文件名自动排序。
轻松更改项目设置
您可以轻松添加由迦太基管理的目标或库。
由于定义文件是文本,因此您可以轻松更改其他设置。
XcodeGen
的缺点
学习费用
对于一般的库来说,这是一个劣势,但要赶上XcodeGen的概述和用法却要花钱。
我希望这篇文章能减少一点费用。
生成项目文件
需要花费时间
我的优点是:"更改文件时无需修改定义文件",但是有必要重新生成项目文件。
如果使用的是CocoaPods,则还必须从项目文件中生成一个工作区。
我制作了一个Makefile以节省时间。
https://qiita.com/uhooi/items/16a870eaae24b46103fb#生成项目文件
应该引入XcodeGen的情况
现在您已经知道XcodeGen的优缺点,我将介绍在什么情况下应该引入XcodeGen。
这只是我的意见,因此请以其为参考。
我在处理项目文件冲突
时遇到麻烦
如果由于大量人员的开发而导致项目文件冲突,则值得考虑进行介绍。
新开发时
如果您具有创建定义文件的经验,则可以复制和粘贴它们并重用它们,从而可以缩短新开发期间的项目创建时间。
另外,在新开发过程中,经常添加文件,以防止冲突。
环境
- 作业系统:macOS Mojave 10.14.6
- 斯威夫特:5.1.3
- Xcode:11.3.1(11C504)
- XcodeGen:2.11.0
设定
安装XcodeGen
从Mint安装。
薄荷文件
1 | + yonaskolb/[email protected] |
1 | $ mint bootstrap |
要手动安装,请参阅官方文档。
https://github.com/yonaskolb/XcodeGen#installing
XcodeGen设置本身仅通过安装即可完成。
创建定义文件
在项目的根文件夹中创建一个新的定义文件。
在本文中," Foo"用作项目名称和项目的根文件夹。
1 2 | $ cd Foo $ touch project.yml |
定义文件描述
从这里,我将在定义文件中一一解释最少的描述。
我无法解释所有可以设置的内容,因此请参阅官方文档以获取详细信息。
https://github.com/yonaskolb/XcodeGen/blob/master/Docs/ProjectSpec.md
名称
指定项目名称。
project.yml
1 | name: Foo |
指定的字符串成为项目文件名。
选项
设置项目选项。
bundleIdPrefix
指定产品捆绑包标识符的前缀(以下称为"捆绑包ID")。
在本文中," com.theuhooi"用作前缀。
project.yml
1 2 | options: bundleIdPrefix: com.theuhooi |
如果指定
前缀,则每个目标的捆绑软件ID会自动设置为" {prefix}。{Target name}"。
这样就无需为每个目标指定
project.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | options: bundleIdPrefix: com.theuhooi targets: Foo: settings: base: PRODUCT_BUNDLE_IDENTIFIER: com.theuhooi.Foo # 不要 FooTests: settings: base: PRODUCT_BUNDLE_IDENTIFIER: com.theuhooi.FooTests # 不要 FooUITests: settings: base: PRODUCT_BUNDLE_IDENTIFIER: com.theuhooi.FooUITests # 不要 |
如果在多平台上目标名称和捆绑包ID不匹配,请明确指定。
developmentLanguage
指定本地化的开发语言。
默认值为英语,并且为日语指定
project.yml
1 2 | options: developmentLanguage: ja |
deploymentTarget
指定每个平台的部署目标。
对于iOS应用程序开发,只需指定" iOS"。
project.yml
1 2 3 | options: deploymentTarget: iOS: 13.0 |
xcodeVersion
指定Xcode的版本。
project.yml
1 2 | options: xcodeVersion: "11.3.1" # 変わらない? |
即使我指定了
,它也没有反映在项目文件中,因此存在某些条件或者我不理解其含义。
正如我在
注释中告诉您的那样,如果不将其用双引号引起来,它将被视为无效值,并且将使用默认值。
findCarthageFrameworks
在安装由迦太基管理的框架时,是否自动安装从属框架是一项设置。
project.yml
1 2 | options: findCarthageFrameworks: true |
可能是创建框架或使用我的问题,但是即使有依赖,它也不会自动安装,或者甚至安装了额外的框架(作为仅用作测试目标的产品目标)指定它,因为它也已安装)。
carthageExecutablePath
指定迦太基的执行路径。
如果迦太基由Mint管理,则必须指定以下内容。
project.yml
1 2 | options: carthageExecutablePath: mint run Carthage/Carthage carthage |
默认值为
设定
设置用于所有目标的构建设置。
如果要单独设置,请在目标的
我已经指定了版本和内部版本号,开发团队和调试信息格式。
仅当构建配置(以下称为"构建配置")为
project.yml
1 2 3 4 5 6 7 8 | settings: base: MARKETING_VERSION: 1.0.0 CURRENT_PROJECT_VERSION: 1 DEVELOPMENT_TEAM: XXXXXXXXXX config: debug: DEBUG_INFORMATION_FORMAT: "dwarf-with-dsym" |
要将
(目标