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。

广告
将在 10 秒后关闭
bannerAds