ios签名过期会怎么样?有什么影响呢

栏目:企业证书打包 时间:2020-04-19 00:12 作者:whbtsj.com
ios签名过期会怎么样?有什么影响呢
    ios签名过期会怎么样?有什么影响呢其实iPA文件就是zip文件,只是后缀不同而已。要重签名,我们需要准备证书与provision profile, 证书直接在Keychian里管理,provision profile与证书是对应关系。 真机调试或提交过App到App Store的朋友都应不会陌生。
 
下面直接说步骤:
a.解压iPA文件
b.删掉旧的签名文件
c.拷贝新的provision profile替换旧的embedded.mobileprovision
d.用codesign命令重签名
f.重新zip为iPA文件
 
下面有一个脚本,它完成了上面5步骤:
 
#!/bin/sh
if ! ([ -f "$1" ]); then
echo \"${1}\"文件不存在
exit
fi
ipaName=${1%.ipa}
if [ "$ipaName" = "$1" ]; then
echo \"${1}\"不是ipa文件
exit
fi
## step 1, unzip ipa file
unzip ${ipaName}.ipa
## step 2, remove old codesign
rm -rf Payload/*.app/_CodeSignature/
## step 3, copy new provision profile
cp 123.mobileprovision Payload/*.app/embedded.mobileprovision
## step 4, codesign with new certificate and provision
(/usr/bin/codesign -f -s "iPhone Developer: XXXXX (XXX)" --resource-rules Payload/*.app/ResourceRules.plist Payload/*.app/) || {
## if code sign error, will to here
echo failed
rm -rf Payload/
exit
}
## step 5, zip it
zip -r ${ipaName}abc.ipa Payload/
rm -rf Payload/
需要注意脚本中有两处需要你们手动修改,第一处是123.mobileprovision,这个文件需要与脚本放同一目录,第二处是XXXXX (XXX), 这儿XXX改为你keychian里有的证书,只需要改XXX, 括号保留。
 
我的笔记:
 
上面的括号并不是一定必要的,这要视你的keychian里的证书而定。如果在keychian证书列表里你需要的证书带括号,那么就带括号,如果不带,就不需要。
 
另外,注意证书重名的问题,如果重名了,会出现下面的提示:
 
iPhone Distribution: XXXXXX ambiguous (matches "iPhone Distribution: XXXXX" and "iPhone Distribution: XXX" in /Users/admin/Library/Keychains/login.keychain)
 
去掉重名的证书就可以解决问题了
 
延伸用途:用于判断provision profile文件是否失效/过期
 
最近遇到一个问题,用企业证书发布的app下载安装失败,主要表现是安装进度条能看到是满了,但是最后一步就是不行,猜测是验证不成功。
 
首先就是猜测provision profile过期了,但是在developer中心查看对应bundle ID的provision profile,是没有过期的,这本身就很奇怪,不管怎样,先试一下吧。先在developer中心里把这个provision profile删除掉,再重新生成一个并下载。然后使用上面的方法,试试重新签名的ipa能否安装。经过我的测试,重新签名的ipa在我的iPhone上是可以安装的。
 
这个问题的另一种分析方法:
 
将iPhone连上Mac,打开Xcode,选择菜单上的Window——Devices,找到自己的设备名,查看右下方的log,可以看到下面的日志:
 
Aug 19 14:54:30 iphone installd[5481] <Notice>: 0x100594000 -[MIInstaller performInstallationWithError:]: Installing <MIInstallableBundle ID=cn.app.test; Version=6_1434698124, ShortVersion=1.4>
Aug 19 14:54:30 iphone misagent[5495] <Error>: attempt to install invalid profile: 0xe8008011
Aug 19 14:54:30 iphone installd[5481] <Error>: 0x100594000 -[MIInstallableBundle _installEmbeddedProfileInBundle:]: Could not install embedded profile: 0xe8008011 (Expired)
 
根据这篇文章,0xE8008011代表The Provisioning Profile being loaded is expired,可以确认就是Provisioning Profile过期了。
 
ipa安装失败时出现的各种错误码的意义:
 
0xE8008003 - It was unable to get the Creation Date of the Provisioning Profile being loaded
0xE8008010 - Provisioning Profile Version is not equal to 1 (?)
0xE8008012 - The UUID of the device does not match any in the Provisioning Profile being loaded
0xE8008011 - The Provisioning Profile being loaded is expired
0xE8008003 - No UUID included in the Provisioning Profile that is being loaded
0xE8008015 - A valid provisioning profile for this executable was not found
0xe8008016 原因可能之一是证书名正确,Profile里的App ID不正确,可能原因2是app id正确而证书名不正确
 
20160421更新:
遇到0xE8008015报错问题的一种情况:从开发者中心下载了发布证书,没在先在生成csr(certSigningRequest)文件的Mac上安装,而是直接在另一台电脑上安装的,导致安装的证书没有私钥。对应的mobileprovision文件会提示valid signing identity not found,不知道为啥能正常生成ipa文件。
 
解决方法是先在生成csr(certSigningRequest)文件的Mac上双击发布证书安装,然后在keychain中导出证书,并设置密码,把生成的p12证书导入另一台Mac双击安装,输入密码,安装成功后在keychain中应该就能看到私钥的。这时候重新生成的ipa文件就能正常安装了
企业证书打包www.whbtsj.com