1.问题的原因
从iOS 14.2 beta 2开始,iOS系统将检查新的、更安全的签名格式。启动使用旧格式签名的APP用户会收到警告,即所有之前 macOS11 以下系统打包的App 在iOS14.6 或者 iOS15 以上的设备都会提示需要更新才能正常工作。
因此我们需要使用新格式给APP重新签名。
2.如何解决
解决办法:
1.首先打包环境 mac升级到macOS11以上,此时打包会采用新的签名机制;
2.在升级到最新系统之后,重新通过Xcode打包生成新的安装包即可;
3.对于企业签的App,则需要企业签名提供商签名mac环境同样升级到macOS11系统之上重新签名方可解决。
打包好的xxxx.ipa文件,备份ipa文件,然后重命名为xxxx.zip,解压后会得到Payload文件夹
//xxxxx为解压后APP的名称
codesign -s "证书名称" -f --preserve-metadata --generate-entitlement-der ./Payload/xxxxx.app
3.简化过程,使用shell脚本完成该操作
想法很简单就是找到在同一目录下的.ipa,并给他重新改签之后,然后输出ipa。
以下是shell 脚本代码:
#!/bin/bash
echo "start to resign file"
read -p "Enter your certificate name:" certificate_name
new_file_name="sign_new.zip"
zip_file="sign_new"
pay_load="Payload"
app_path=`pwd`
app_name=''
ori_ipa_name = ''
echo $app_path
# 查找ipa文件
for file in `ls `
do
if [[ $file =~ \.ipa$ ]];then
echo "have find file "
ori_ipa_name=$file
# 拷贝文件并修改文件名
cp -rvf $file $new_file_name
mkdir $zip_file
unzip $new_file_name -d $zip_file
for appName in `ls $zip_file/$pay_load`
do
echo "find .app file"
app_name="$appName"
done
fi
done
echo "start to resign"
#demo为解压后APP的名称 重签名 XXXXXXXXX 为证书名
codesign -s $certificate_name -f --preserve-metadata --generate-entitlement-der $zip_file/$pay_load/$app_name
echo "start to zip file"
# 开始重新打包
zip -ru resign$ori_ipa_name $zip_file/$pay_load
echo "start to delete file"
# 删除之前生成的文件
rm -r $zip_file
rm $new_file_name
echo "resign File has finished"
将该ipa放入与 .sh文件 同目录下,使用:
./signModify.sh
执行该shell文件,会让你输入证书名,直接在钥匙串中复制证书的名字即可
执行完指令后会在同目录下生成已经签名过的ipa文件
展示 resign File has finished 表示改签完毕
改签完成后输出的.ipa文件