0

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

于 2013-09-07T06:26:46.230 回答