【问题标题】:Using git tag for app version number without commit squashing?在没有提交压缩的情况下使用 git 标签作为应用程序版本号?
【发布时间】:2013-09-07 14:26:46
【问题描述】:

SO 中已经有很多关于此的问题(和答案),但似乎都没有解决这个具体问题,或者我只是不理解这个过程。典型的开发流程,结束于:

  1. 最终代码修复和测试
  2. 提交到 Git
  3. 使用版本号标记提交
  4. 运行脚本以更新 Info.plist 的版本和内部版本号
  5. ????

我在 Post-Archive 构建步骤中运行第 4 步,因此 plist 得到更新并创建了我的分发存档。效果很好,除了...

我提交和标记的快照不是更新的 Info.plist 中包含正确版本信息的快照。这是第 22 条规则。在更新 plist 之前我无法提交,但在我有标记提交之前我无法更新 plist。

是的,我可以将更改后的 plist 压缩回提交,然后重新标记,但这肯定不是自动化的,而且容易出错。

也许我应该在提交前或提交后挂钩中执行此操作?还是我的流程有问题?

编辑:这个问题专门关于在 Xcode 中使用 Git,以及该特定环境中的最佳实践。我想仅仅在问题上加上 Xcode 标签是不够的。

【问题讨论】:

  • 为什么不在更新 Info.plist 后简单地创建标签?我不确定我是否理解这个问题。
  • 目前,版本号(和标签)取决于提交。也就是说,该脚本从已经提交的标签生成版本号,该版本号进入 info.plist。
  • 貌似stackoverflow.com/a/11899540/177415问了同样的问题,但我没看懂回复。
  • 您的意思是您存储在 Info.plist 中的版本号取决于 Git 的 SHA1 提交 id 的实际值吗?是的,您将无法将其存储在 Info.plist and 具有相同值的标签中。即使是压缩提交也不行。
  • 不,它不依赖于 SHA1 ID,但它确实要求提交(和标签)已经存在。我认为您的建议是使用新版本号手动编辑 Info.plist,然后进行提交,然后标记该提交。对我来说似乎很容易出错。

标签: xcode git


【解决方案1】:

不要将版本号作为文字存储在 Info.plist 中。使用存储库中的 Info.plist 作为模板,并让构建过程从中生成构建应用程序中的实际 Info.plist。这实际上是默认设置,在构建过程中会将 PRODUCT_NAMEEXECUTABLE_NAME 等构建设置替换到文件中。

因此,版本号应在每次构建期间根据存储库的状态计算。这带来了一个复杂性,即即使模板文件的修改时间没有改变,Xcode 也需要强制从模板生成构建的 Info.plist。

我建议您将存储库中的 Info.plist 重命名为 Info.plist.in 或其他名称,然后使用运行脚本构建阶段从 Info.plist.in 生成 Info.plist。正如我在this answer 中建议的那样,您可以使用单独的目标来执行此操作。该目标将作为构建应用程序的目标的依赖项添加,因此 Xcode 肯定会首先构建它。生成 Info.plist 的目标将是一个仅包含运行脚本构建阶段的 shell 脚本目标。如果您不设置运行脚本构建阶段的输入,Xcode 将无条件运行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2014-12-26
    • 2012-09-05
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多