#!/bin/bash
#ver:1.2.0
#20180315
my_passworld="170330"
while getopts "i:c:p:o:d:m:h" arg #选项后面的冒号表示该选项需要参数
do
case $arg in
i)
ipaFilePath=$OPTARG
echo "ipaFilePath:$ipaFilePath" #参数存在$OPTARG中
if [ ${ipaFilePath##*.} != ipa ];then
echo 不是.ipa文件
exit
fi
if [ ! -f "${ipaFilePath}" ];then
echo .ipa文件不存在
exit
fi
;;
c)
chId=$OPTARG
echo "chId:$chId"
;;
p)
cpId=$OPTARG
echo "cpId:$cpId"
;;
h)
echo "短选项:"
echo "-i:输入.ipa文件(必填)"
echo "-c:输入chId(选填)"
echo "-p:输入cpId(选填)"
echo "-c、-p 必须同时输入,否则不会写入渠道信息"
echo "-o:输出路径(选填) 例子:/foo/bar.ipa"
echo "-d:开发者标识(选填)"
echo "-m:mobileprovision(选填)"
echo "-h:帮助"
exit
;;
o)
output=$OPTARG
echo "output:$output"
;;
d)
developer=$OPTARG
echo "developer:$developer"
;;
m)
mobileprovision=$OPTARG
echo "mobileprovision:$mobileprovision"
if [ ${mobileprovision##*.} != mobileprovision ];then
echo 不是.mobileprovision文件
exit
fi
if [ ! -f "${mobileprovision}" ];then
echo .mobileprovision文件不存在
exit
fi
;;
?) #当有不认识的选项的时候arg为?
echo "unkonw argument"
exit
exit 1
;;
esac
done
if [ -z "${ipaFilePath}" ];then
echo "没有ipa,请使用 -i 短选项。或-h查看帮助"
exit
fi
IpaExtractTmpDir="ExtractTmp_"$(date '+%s')$((RANDOM))
IpaExt=".ipa"
echo IpaExtractTmpDir:${IpaExtractTmpDir}
set -e
#workDir=$(cd "$(dirname "$0")"; pwd)
shDir=$(cd "$(dirname "$0")"; pwd)
#ipaFileName=`basename "${ipaFilePath}"`
workDir=`pwd`
if [ -z "${developer}" ];then
developer="iPhone Distribution: Shanghai Emotion Network Technology Co.Ltd."
fi
echo "developer:$developer"
if [ -z "${mobileprovision}" ];then
mobileprovision="${shDir}/embedded.mobileprovision"
fi
echo "mobileprovision:$mobileprovision"
rm -rf "${workDir}/${IpaExtractTmpDir}"
echo "创建目录..."
mkdir -p "${workDir}/${IpaExtractTmpDir}"
#获得keychain权限
# security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k 123456 login.keychain
echo "获得keychain权限"
echo `security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ${my_passworld} login.keychain` >> "${workDir}/${IpaExtractTmpDir}/security.txt"
# echo $ipaFilePath
ipaFileName=`basename "${ipaFilePath}"`
ipaFileNameWithNoExt=`basename "${ipaFilePath}" ${IpaExt}`
# echo "${ipaFileName}"
# echo "${ipaFileNameWithNoExt}"
echo "拷贝文件..."
cp "$ipaFilePath" "${workDir}/${IpaExtractTmpDir}/${ipaFileName}.zip"
cd "${IpaExtractTmpDir}"
echo "解压..."
unzip -q "${workDir}/${IpaExtractTmpDir}/${ipaFileName}.zip"
rm -rf "${workDir}/${IpaExtractTmpDir}/${ipaFileName}.zip"
rm -rf "${workDir}/${IpaExtractTmpDir}/__MACOSX"
#cp "${shDir}/Entitlements.plist" "Entitlements.plist"
appFilePath=`find "${workDir}/${IpaExtractTmpDir}/Payload" -type d -name '*.app'`
cp "${mobileprovision}" "${appFilePath}/embedded.mobileprovision"
echo "Extract entitlements from mobileprovisioning"
security cms -D -i "${mobileprovision}" > "provisioning.plist"
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' "provisioning.plist" > "Entitlements.plist"
# echo "${appFilePath}"
echo "------------------resign framework-------------------------------"
find "${appFilePath}" -depth -mindepth 2 -type d -name '_CodeSignature'| while read var;
do
echo "var=${var}"
fmwkFilePath=`dirname "${var}"`
fmwkFileName=`dirname "${fmwkFilePath}"`
echo "${fmwkFilePath}"
echo "${fmwkFileName}"
fmwkRelativeFilePath=${fmwkFilePath#*/${IpaExtractTmpDir}/}
echo $fmwkRelativeFilePath
rm -rf "${fmwkRelativeFilePath}/_CodeSignature"
pwd
codesign -vvv -fs "$developer" --entitlements Entitlements.plist "${fmwkRelativeFilePath}"
done
echo "------------------resign framework end-------------------------------"
echo "------------------resign dylib-------------------------------"
find "${appFilePath}" -name '*.dylib'| while read dylibVar;
do
echo "dylibVar=${dylibVar}"
codesign -vvv -fs "$developer" --entitlements Entitlements.plist "${dylibVar}"
done
echo "------------------resign dylib end-------------------------------"
rm -rf "${appFilePath}/_CodeSignature"
# 写入channel、cp信息
# cp "../channel.dat" "${appFilePath}/channel.dat"
if [ -n "${chId}" -a -n "${cpId}" ];then
FileNameChannel="channel.plist"
FileNameChannelPath="${appFilePath}/${FileNameChannel}"
echo "正在处理渠道${cpId}包:"
if [ -f "${FileNameChannelPath}" ];then
rm -rf "${FileNameChannelPath}"
fi
touch "${FileNameChannelPath}"
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" >> "${FileNameChannelPath}"
echo "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "${FileNameChannelPath}"
echo "<plist version=\"1.0\">" >> "${FileNameChannelPath}"
echo "<dict>" >> "${FileNameChannelPath}"
echo " <key>chId</key>" >> "${FileNameChannelPath}"
echo " <string>${chId}</string>" >> "${FileNameChannelPath}"
echo " <key>cpId</key>" >> "${FileNameChannelPath}"
echo " <string>${cpId}</string>" >> "${FileNameChannelPath}"
echo "</dict>" >> "${FileNameChannelPath}"
echo "</plist>" >> "${FileNameChannelPath}"
resignedName="../${ipaFileNameWithNoExt}_${cpId}.ipa"
else
resignedName="../${ipaFileNameWithNoExt}_resigned.ipa"
fi
if [ -n "${output}" ];then
resignedName="${output}"
fi
appFileName=`basename "${appFilePath}"`
# echo $appFileName
# echo "Payload/${appFileName}"
codesign -vvv -fs "$developer" --entitlements Entitlements.plist "Payload/${appFileName}"
rm -rf "${resignedName}"
#zip -rq "resign${ipaFileName}" Payload Entitlements.plist
if [ -d Symbols ];then
zip -yrq "${resignedName}" Payload Symbols
else
zip -yrq "${resignedName}" Payload
fi
#cp "${resignedName}" "../${resignedName}"
cd ..
rm -rf "${workDir}/${IpaExtractTmpDir}"
echo "重签成功"
评论星级较低,若资源使用遇到问题可联系上传者,7个工作日内问题未解决可申请退款~