Jenkins打包iOS自动修改build号

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

设计思路

  • Jenkins打包目录下,记录上次打包的build信息(包括版本号、build号)
  • 打包前读取上次打包配置,同项目的Info.plist比较,版本号一致的情况:就将上次打包的build号+1,版本不一致的情况:取Info.plist的build号+1
  • 将Info.plist中的build号修改,并将本次修改的配置写入本地的打包配置中
  • 由于之前设计的是用一个build.json来存放打包的信息,打包之后将新的build号和version信息写回去,后来发现当多个版本交叉打包的时候,出现build修改异常的问题
    • 解决这个问题就是将每个版本的build号都记录下来,或者build号一直累加;这里选择前者,如何存储每个版本的build号,可以一个文件按照版本号为key将信息存起来或者一个版本一个文件存信息,我选择了后者,主要是一个json文件存多个版本信息,取得时候还好说,写的时候要修改某个版本的值,还不会~
    • 实现思路就是:创建一个文件夹用来存放版本信息文件,打包前先读文件中有没有版本号对应的json文件,有的话,取出buildNumber+1,没有的话就用plist中的配置加1,最后将打包的配置写到对应版本号的json中

脚本

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的打包主目录就好

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容