在iOS15.0及以上設(shè)備上,如出現(xiàn)超級簽、企業(yè)簽及內(nèi)測包出現(xiàn)“此App的開發(fā)者需要更新App以在此iOS版本上正常工作”或無法安裝問題,系蘋果簽名方式更新造成,可根據(jù)實際情況解決。
方案一
將對應(yīng)Xcode工程轉(zhuǎn)移到MacOS11及以上版本的機器進行重新構(gòu)建出包。
方案二
在MacOS10.14及以上版本的機器上進行如下操作:
- 將原ipa文件后綴改為zip,解壓。
- 執(zhí)行codesign進行重簽
codesign -s "iPhone Developer: XXX" -f --preserve-metadata --generate-entitlement-der */Payload/xxx.app
codesign -dvvvvv */Payload/xxx.app
其中"iPhone Developer: XXX"為對應(yīng)的證書名稱,*/Payload/xxx.app為解壓后.app文件路徑。
- 將Payload壓縮,改后綴為.ipa,重新分發(fā)即可。
Shell腳本實現(xiàn)
#!/bin/bash
#Re-sign for iOS 15.0+
#$1: origin ipa file folder
#$2: Certification name
ipa_name=''
app_name=''
suffix_ipa='.ipa'
suffix_zip='.zip'
cd $1
dir=$(eval pwd)
rename(){
for file in $(ls $dir | grep .$1)
do
ipa_name=$(ls $file | cut -d. -f1)
mv $file ${ipa_name}$2
done
echo "??Rename ${ipa_name}$1 to ${ipa_name}$2 done..."
}
#Rename .ipa to .zip
rename $suffix_ipa $suffix_zip
#Unzip file
unzip -q $ipa_name.zip
rm $ipa_name.zip
echo "??Unzip ${ipa_name}$suffix_zip done..."
#Get app name
for file in $(ls $dir/Payload/)
do
if [ "${file##*.}" = "app" ]; then
app_name=${file%.*}
echo "??Get app name:$app_name"
fi
done
#Code sign
der_name=$2
codesign -s "$der_name" -f --preserve-metadata --generate-entitlement-der Payload/$app_name.app
codesign -dvvvvv Payload/$app_name.app
echo "??Re-sign done..."
#Zip
zip -q -r $ipa_name.zip Payload
rm -rf Payload
echo "??Zip done..."
#Rename .zip to .ipa
rename $suffix_zip $suffix_ipa
echo "??The ipa file supporting iOS 15.0+ have been generated"