在 Xcode 中自动递增内部版本号以及使用 Git 的多个开发人员

mag*_*MTB 3 git xcode auto-increment

我正在启动一个新项目,该项目将有多个开发人员使用 Git 在 Xcode 中工作。我想设置自动递增的内部版本号,并且我已经找到了一些关于如何执行此操作的很好的答案,但我担心的是多个开发人员和 Git。

我知道 Xcode 中有一些文件(例如项目文件)非常敏感且难以合并。我见过的自动递增构建号的最佳技术很容易受到相同的多个 Git 合并问题的影响。

这里有关于如何使用自动增量构建技术并仍然将合并问题保持在最低限度的指导吗?也许答案是没有好的答案,但我想了解其他人在做什么。

mag*_*MTB 5

首先感谢哈拉尔德的回答和评论,这帮助我更好地思考我真正想要完成的事情。

让我总结一下我的想法是什么,我意识到我想做什么,以及我是如何做到的。

我想要一种以自动方式填充内部版本号 (CFBundleVersion) 的方法。该值存储在主项目 -Info.plist 文件中,该文件受源代码控制。我担心遵循通过“构建阶段”脚本自动化此操作的指南,因为它会为可能的多个开发人员修改此文件,并导致需要不断合并的情况。

我想要这个的原因是这样我可以轻松地追踪特定构建中正在使用的代码。虽然人们当然可以通过标记和适当的文档手动完成此操作,但我想要一种更加自动化和灵活的方式,因为我认为我将完成 TestFlight 的大量构建。

我最初的想法是对这个值使用一个简单的增量构建号,但这确实会给合并带来麻烦。Harald 关于在 Git 存储库上使用提交 SHA 的建议激发了我更好的思路。

因此,我的解决方案的第一部分是使用提交 SHA 中的前 9 个字符(SHA 太长)。我使用前 9 个字符,因为我正在运行 GitLab HQ(顺便说一句,这是一个很棒的开源项目),并且他们在显示正在运行的提交流时使用前 9 个字符。获取此信息的命令如下:

/usr/bin/git rev-parse --short=9 HEAD
Run Code Online (Sandbox Code Playgroud)

为了避免出现 Git 合并问题,我想到首先更改项目 -Info.plist 文件中的构建号(CFBundleVersion)值,允许构建运行,然后在最后一步将值更改回默认值1 这样就不会在源代码管理中出现更改。我尝试了使用“运行脚本”在“构建阶段”流程中执行此操作的各种方法,但似乎即使在最后一步中放入代码以恢复值,它也会影响正在运行的应用程序。

经过更多挖掘后,我发现了模式以及预操作和后操作。这似乎就是我的路线。

因此,在架构中,对于“构建”计划,我创建了一个预操作,将 CFBundleVersion 值设置为我当前的提交 ID(9 个字符),在后操作中,我会将此值恢复为默认值(1). 这似乎按照我的需要工作。

这是我的预操作代码:

buildPlist="$SRCROOT/$INFOPLIST_FILE"
echo "The build plist file $buildPlist"

CFBundleVersion="$(cd $SRCROOT;/usr/bin/git rev-parse --short=9 HEAD)"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
Run Code Online (Sandbox Code Playgroud)

这是我的操作后代码:

buildPlist=$"$SRCROOT/$INFOPLIST_FILE"
CFBundleVersion=1
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
Run Code Online (Sandbox Code Playgroud)

这段代码与我在“构建阶段”脚本中使用的代码不同之处在于需要使用 $SRCROOT 来设置目录。最初我的印象是您会获得与“构建阶段”相同的构建设置,但看来您没有。“运行脚本”窗口中有一个名为“从以下位置提供构建设置:”的选项,它允许您选择目标。也许这是正确的,无论考虑到预操作,您都必须设置完整的目录路径。我花了一点时间才弄清楚这一点,所以我想我会提到它。


总之,我很感激收到的信息,它帮助我思考我想要做什么并最终实现我想要的目标。