前言
我们项目是做IOS移动端sdk开发和客户支持的,现在需要写一个脚本,根据客户提供的ipa包,自动修改包内plist文件的版本号。选择了用Shell脚本写。
思路
根据客户的ipa包,首先需要解包,然后需要准确定位到我们sdk的plist文件位置,然后使用PlistBuddy进行修改,最后重新压缩成ipa包。
完整代码
#!/bin/sh
#脚本接收第一个一个参数是ipa路径 第二个参数是版本号
bundleVersion="CFBundleVersion"
shortVersion="CFBundleShortVersionString"
IPA_NAME="ipaTemp.ipa"
#ipa路径
IPA_FILE=${1}
#解压路径
IPA_DIR="/Users/chen.peng/Desktop/changeSDKVersionTemp"
warningString="错误:"
noteString="提示:"
#删除临时解包目录
if [ -d "$IPA_DIR" ]; then
echo "rm changeSDKVersionTemp"
rm -rf "${IPA_DIR}"
else
echo "mkdir changeSDKVersionTemp"
mkdir -p "${IPA_DIR}"
fi
#解包IPA
if [[ -f "$IPA_FILE" ]]; then
echo "unzip $IPA_FILE begin ..."
unzip -q "$IPA_FILE" -d "$IPA_DIR"
if [[ $? != 0 ]]; then
echo "unzip $IPA_FILE failed"
exit 2
else
echo "unzip $IPA_FILE successed"
fi
fi
# 定位到*.app目录
appDir="$IPA_DIR/Payload/`ls "$IPA_DIR/"Payload`"
#先查找lcm.bundle所在路径,以防路径不对
lcmBundle=`find "${appDir}/" -type d -name lcm.bundle`
lcmInfoPlist="${lcmBundle}/Info.plist"
echo $lcmInfoPlist
function change {
value=`/usr/libexec/PlistBuddy -c "Print :${1}" $lcmInfoPlist`
echo "$value"
#修改SDK_VERSION
if [[ -n $value ]]; then
`/usr/libexec/PlistBuddy -c "Set :${1} ${2}" $lcmInfoPlist`
echo "设置完成"
else
`/usr/libexec/PlistBuddy -c "Add :${1} ${2}" $lcmInfoPlist`
echo "新增完成"
fi
}
change $bundleVersion ${2}
change $shortVersion ${2}
#将修改完的文件打包成ipa
cd ${IPA_DIR}
zip -r -q $IPA_NAME Payload
if [[ $? != 0 ]]; then
echo "zip Payload failed"
exit 2
else
echo "zip Payload successed"
if [[ -d "$IPA_DIR/Payload" ]]; then
rm -rf "$IPA_DIR/Payload"
echo "删除Payload成功"
fi
fi
总结
代码里的解释已经很详细了,主要就是熟悉一下zip、PlistBuddy、find命令的用法。
网友评论