Xcode

Jenkins打包iOS自动修改build号

2019-04-15  本文已影响0人  jayhe
  • 有时候打AppStore的ipa,发现之前上传的ipa有问题之后又要重新打包,就需要修改build号,否则替换Itunes Connet上的包就报错;手动修改难免会忘记
  • 使用脚本去修改Info.plist的build号,来避免遗忘修改

设计思路

脚本

modify_build_number.sh

#!/bin/bash -il

export LC_ALL=en_US.UTF-8

source ~/.bashrc
# 存储所有版本号的打包版本信息文件夹【一个版本对应一个json避免一个json导致打了不同的版本的包覆盖的情况】,这个文件夹由外部传入,一般放到Jenkins的主目录
BuildNumberPath=$1
if [[ ! -d $BuildNumberPath ]]; then
    mkdir $BuildNumberPath
    chmod 777 $BuildNumberPath
    echo ${BuildNumberPath}
else
    echo ${BuildNumberPath} 
fi
# 版本号自增
PlistDir="YourProjectInfoPlistPath"
BuildVersion=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PlistDir}")
BuildJsonPath=${BuildNumberPath}/${BuildVersion}.json
echo ${BuildJsonPath}
if [[ -f $BuildJsonPath ]]; then
# 读取Json中上次打包的build信息
    echo "读取Json中上次打包的build信息"
    PreBuildVersion=`cat ${BuildJsonPath} | jq -r ".BuildVersion"`
    PreBuildNumber=`cat ${BuildJsonPath} | jq -r ".BuildNumber"`
    echo "PreBuildVersion:${PreBuildVersion}"
    echo "PreBuildNumber:${PreBuildNumber}"
    echo "Plist中BuildVersion:${BuildVersion}"
else
# 使用项目Info.plist的信息
    echo "使用项目Info.plist的信息"
    BuildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${PlistDir}")
    echo "Plist中BuildNumber:${BuildNumber}"
fi

if [ "${PreBuildVersion}" == "${BuildVersion}" ]; then
    echo "版本号未改变"
    BuildNumber=`expr ${PreBuildNumber} + 1`
else
    echo "版本号改变"
    BuildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${PlistDir}")
    echo "BuildNumber:${BuildNumber}"
    BuildNumber=`expr ${BuildNumber} + 1`
fi

echo "自增之后BuildNumber:${BuildNumber}"

if [[ "${BuildNumber}" != "" ]]; then
    # 修改Info.plist的build号
    echo "修改Info.plist的build号"
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BuildNumber}" "${PlistDir}"
    # 写本次打包信息到build.json
    echo "{\"BuildNumber\":\"${BuildNumber}\", \"BuildVersion\":\"${BuildVersion}\"}" > ${BuildJsonPath}
fi

PlistDir是项目的Info.plist的路径,这里需要修改为你的项目中的路径
BuildJsonPath是本地用于存储打包的版本和build号信息的文件路径 eg:xx/xx/build.json

执行脚本

cd ./shellDir && ./modify_build_number.sh 'BuildJsonPath'
shellDir表示脚本的路径
BuildJsonPath表示上次打包配置的本地缓存文件,一般存放到Jenkins的打包主目录就好

上一篇 下一篇

猜你喜欢

热点阅读