由于测试的需求,最近要给 version 相同的安装包区分不同的打包版本,于是想起了之前用xcode中build号来做,因为这个是可以自增的,通过在build phases中添加脚本来执行:
echo $CONFIGURATION
if [ "Release" == "${CONFIGURATION}" ]
then
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
echo "build number increase"
fi
但是发现编译错误,原来 Xcode11后
会把 info.plist
文件中的 CFBundleVersion
修改为$(CURRENT_PROJECT_VERSION)
、CFBundleShortVersionString
修改为 $(MARKETING_VERSION),最终
buildNumber 的值是字符串,无法进行 + 1 操作,所以导致错误。 网上的解决方案是把上面脚本中的
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
替换成 buildNumber=$CURRENT_PROJECT_VERSION,但是这样做只在第一次编译的时候起作用,因为自增之后没有改变CURRENT_PROJECT_VERSION 的值,而是改变了 plist文件中的 Bundle version。所以在其基础上加上一条if语句,最终脚本如下:
echo $CONFIGURATION
if [ "Release" == "${CONFIGURATION}" ]
then
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
if [ "$buildNumber" == "\$(CURRENT_PROJECT_VERSION)" ]
then
buildNumber=$CURRENT_PROJECT_VERSION
fi
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
echo "build number increase"
fi
测试debug环境时,只需要把第二行脚本中的 “Release” 换成 “Debug”, command + B 就可以看见变化啦!