美文网首页Jenkins
Shell脚本修改ipa包内plist文件

Shell脚本修改ipa包内plist文件

作者: Jackie_pc | 来源:发表于2019-02-12 17:44 被阅读0次

前言

我们项目是做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命令的用法。

相关文章

网友评论

    本文标题:Shell脚本修改ipa包内plist文件

    本文链接:https://www.haomeiwen.com/subject/hpwksqtx.html