CFBundleVersion = ❤ Git (只需要一种翻译选项)
我希望在使用CircleCI构建iOS项目时,能够成功更新Build(CFBundleVersion)。
之前我们创建了一个脚本,并通过 CircleCI 进行提交来增加 CFBundleVersion 的值,但遇到了与 GitHub 的新功能冲突的问题。
因为GitHub的新功能影响,必须通过主分支的测试,否则无法通过,会陷入困境。为了确保在CircleCI上不运行构建,可以在提交消息中包含[skip ci]或[ci skip]。
在那里考虑了解决方案。其中之一是使用$CIRCLE_BUILD_NUM。这非常有效。
从那里开始展开思路并进行搜索,找到了下一篇文章。
使用CFBundleVersion和时间戳的方法,这也很有效。
http://www.tokoro.me/2014/05/19/xcode-versioning/
在这里,我发现可以从当前状态生成CFBundleVersion而无需提交。因此,根据上述方法,我考虑了以下脚本。
plistBuddy="/usr/libexec/PlistBuddy"
infoPlistFileSource="${SRCROOT}/${INFOPLIST_FILE}"
infoPlistFileDestination="${TEMP_DIR}/Preprocessed-Info.plist"
if ! git diff-index --quiet HEAD --; then
gitChangedSuffix="*"
fi
branchName=$(git rev-parse --abbrev-ref HEAD)
shortGitVersionHash=$(git rev-parse --short HEAD)
gitBaseVersion="$branchName:$shortGitVersionHash"
if [ -n "$CIRCLE_BUILD_NUM" ] && [ $branchName = "master" ]; then
versionString=${CIRCLE_BUILD_NUM}
elif [ -n "$CIRCLE_BUILD_NUM" ]; then
versionString=$gitBaseVersion#${CIRCLE_BUILD_NUM}
else
versionString=$gitBaseVersion${gitChangedSuffix}
fi
$plistBuddy -c "Set :CFBundleVersion $versionString" $infoPlistFileDestination
这会有四个结果。
A: master:db4e1e6
B: master:db4e1e6*
C: master:db4e1e6#1
D: 1
-
- Aは、CircleCI以外でビルドした場合
-
- Bは、Aの場合でaddされてないコミットがある場合
-
- Cは、CircleCIでmaster以外でビルドした場合
- Dは、CircleCIでmasterでビルドした場合
实际上由以下要素构成。
(GIT_BRANCH):(GIT_SHORT_HASH)(GIT_CHANGE)(#CIRCLE_BUILD_NUM)
在结论中,可以通过这种方式根据Git的状态确定CFBundleVersion,因此可以通过CFBundleVersion来反向查找应用程序的实际代码,并更容易地解决问题。
D之所以需要的原因是,申请时需要CFBundleVersion是通过句点分隔的非负整数。由于ITMS-90060错误,无法将二进制文件上传到iTunes Connect。