在SO中已有很多问题(和答案),但似乎都没有解决这个问题,或者我只是不理解这个过程。典型的开发过程,结束于:
我在Post-Archive构建步骤中运行第4步,因此plist会更新并创建我的分发存档。效果很好,除了......
我提交并标记的快照不是具有更新的Info.plist的快照,其中包含正确的版本信息。这是一个问题22。在更新plist之前我无法提交,但是在我有标记的提交之前我无法更新plist。
是的,我可以将更改后的plist提交回提交之后,然后重新标记,但这肯定不会自动化,而且容易出错。
也许我应该在提前或提交后挂钩中执行此操作?或者我的流程错了吗?
编辑:这个问题具体是关于将Git与Xcode一起使用,以及该特定环境中的最佳实践。我想只是把Xcode标签放在问题上就不够了。
答案 0 :(得分:0)
不要将版本号存储为Info.plist中的文字。使用存储库中的Info.plist作为模板,让构建过程从构建的应用程序中生成实际的Info.plist。这实际上是默认设置,在构建期间将PRODUCT_NAME
,EXECUTABLE_NAME
等构建设置替换为文件。
因此,应在每次构建期间根据存储库的状态计算版本号。这引发了一个复杂的问题,即即使模板文件的修改时间没有改变,也需要强制Xcode从模板生成构建的Info.plist。
我建议您将存储库中的Info.plist重命名为Info.plist.in或其他内容,然后使用运行脚本构建阶段从Info.plist.in生成Info.plist。正如我在this answer中建议的那样,您可以使用单独的目标来执行此操作。此目标将作为构建应用程序的目标的依赖项添加,因此Xcode肯定会首先构建它。生成Info.plist的目标是一个只包含运行脚本构建阶段的shell脚本目标。如果您没有设置运行脚本构建阶段的输入,Xcode将无条件地运行它。