簡介
最近有 ipa 包的重簽需求篙程,在此記錄一下
shell 腳本
#重簽路徑
sign_path=$1
#需要重簽的 ipa 路徑
ipa=$2
cd $sign_path
#替換 pp 文件名
provisioningProfile='xxxxx.mobileprovision'
#替換 team id
distributionCertificate='iPhone Distribution: XXXXX'
#替換 bundleid
bundleIdentifier="com.xxxx.xxxx"
echo "解壓縮 ipa ********** "
unzip -q "$ipa"
cd Payload
declare -a appsInPayload=()
appsInPayload=$(find . -name '*app' | sed 's|^\./||')
cd ..
if [[ ${#appsInPayload[*]} -gt 1 ]]; then
echo "Payload 中不止包含 1 個.app 文件 **********/ (${appsInPayload[*]})"
echo -e "重簽失敗 **********"
exit 1
fi
app=$appsInPayload
echo -e"刪除原有的 _CodeSignature**********"
rm -r -f Payload/"$app"/_CodeSignature
echo -e"解密 pp 文件**********"
security cms -D -i "$provisioningProfile" > ProvisioningProfile.plist 2>&1
/usr/libexec/PlistBuddy -x -c 'Print Entitlements' ProvisioningProfile.plist > Entitlements.plist 2>&1
echo -e"將新的 pp 文件拷貝到 app 中 ********** "
cp "$provisioningProfile" Payload/"$app"/embedded.mobileprovision
if [[ -n $bundleIdentifier ]]; then
/usr/libexec/PlistBuddy -x -c "Set :CFBundleIdentifier $bundleIdentifier" Payload/"$app"/Info.plist
else
echo ""
fi
echo -e"重簽所有的動態(tài)庫 **********"
if [[ -e Payload/$app/Frameworks ]]; then
cd Payload/"$app"/Frameworks
swiftLibraries=$(find . -name '*dylib')
SDK_PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/"
for dylib in $swiftLibraries; do
codesign -f -s "$distributionCertificate" "$dylib"
done
frameworks=$(find . -name '*framework')
for framework in $frameworks; do
codesign -f -s "$distributionCertificate" "$framework"
done
cd ../../..
fi
codesign -f -s "$distributionCertificate" --entitlements Entitlements.plist Payload/"$app"
echo "重新生成 ipa 文件 **********"
zip -q -r resigh.ipa Payload SwiftSupport Symbols
echo -e "重簽完成 **********"