下午打开手机上的测试App发现一打开就闪退,在Xcode中看Device Log显示下面的错误:
app.app/app not valid: 0xe8008016: The executable was signed with invalid entitlements.
之前都好好的,一看就是证书出了问题,联想到之前刚刚给开发者账号续过费,猜测是证书过期了。
去钥匙串里一看,果然是证书过期了。于是去开发者中心重新生成了证书,下载安装。同时重新下载了对应的mobileprovision文件并安装。
不知道为什么再运行的时候出现了一个下面的错误:
The identity used to sign the executable is no longer valid.
Please verify that your device’s clock is properly set, and that your signing certificate is not expired. (0xE8008018).
先是检查了一下 General中的Team发现信息不对改成了正确的,然后在Build Setting中更新了Code Sign Identity设置和Provisioning Profile设置。
然后倒好,编译时就直接出错,提示no identity found。
这就头痛了,证书明明已经更新为最新了,然后是Provisioning Profile的问题?根据更新xcode6 运行报错 Command /usr/bin/codesign failed with exit code 1这篇文章的说法,我以为是Provisioning Profile过期的问题,因为这个app的profile更新过很多次,有的的确过期了,而且生成了很多同名的mobileprovision文件。
在“iphone配置使用工具”中,确实能找到同名的profile,把旧的同名profile文件都删掉,只保留掉最新的,编译也还是报错。——原文里没说怎么在“iphone配置使用工具”中删除profile文件,刚开始找不到删掉的办法,强行打开~/Library/MobileDevice/Provisioning Profiles文件夹删掉,后来还是找到了方法,是按Backspace键来删除profile文件。
试过重启Xcode,Clean所有Build,依然不能解决。
突然就想,原来的证书过期了,对应的Provisioning Profile是不是要重新生成才行?在开发者中心里删掉旧的profile文件再重新生成,指定新的证书,下载安装后测试果然就可以了。
现在再回顾一下,觉得问题的根源应该是mobileprovision文件绑定了证书的ID。如果证书过期,对应的mobileprovision文件也全部失效,但是你在文件预览或者“iphone配置使用工具”中看到它没有过期,以为还能用,这就是坑爹的地方。
no such provisioning profile was found错误
后来有一次做archive版本后再联机调试安装,Xcode报下面的错误:
Your build settings specify a provisioning profile with the UUID “xxxxx”, however, no such provisioning profile was found.
其中的xxxxx是provisioning profile的序列号,我检查了一下这个profile是已经在我的Mac上安装了,但是编译时就是会提示上面的错误,按照《更新证书错误:No matching provisioning profiles found》上的步骤操作了一遍没有解决问题,然后看ios - Xcode 7.2 no matching provisioning profiles found - Stack Overflow里说要重启Xcode,这样做了一遍,果然就好了。看来就是Xcode抽风。
your account already has a valid iOS Distribution certificate问题
以上错误是在用Xcode做Archive后提交AppStore遇到的错误,并有以下具体的说明:
you have a valid iOS Distribution certificate in the Member Center, but it is not installed locally. If your signing identity is installed on another Mac, you can export a developer profile on that Mac and import it on this Mac. You can also reset your current certificates.
但是做企业版就没有这个问题。
搜了一下网上说有要撤销证书再重新生成下载安装的,还有把电脑上的证书删掉,再从别人那里拿p12文件安装。不排除上面的办法对有些人有用,但是对我完全没有效果。
其实真正的核心点在于为什么做企业版就没有这个问题?后来我想明白了,其实是因为上次做企业版ipa包的时候,在Scheme里的Archive中将Build Configuration设置为了Enterprise,这意味着做出来的ipa包只能适用于企业版的签名,而不能用于Appstore Distribution版。
把Build Configuration设置修改为对应Appstore Distribution版的Release,再重新试了一遍,就解决问题了。
应该还是有办法避免这个问题的,比如用脚本进行编译,一些参数应该是写死的,就不会有这个问题了。
20161101更新:
昨天又遇到这个问题了,查了半天发现是我在公司开发者账号上创建的证书被别人给删了,对应的provision profile出现了invalid提示。更新证书和provision profile文件才解决问题
No matching provisioning profiles found问题
在Xcode中当你在更新了你得证书而再重新编译你的程序,真机调试会出现“Your build settings specify a provisioning profile with the UUID‘XXX’, however, no such provisioning profile was found. Xcode can resolve this issue by downloading a new provisioning profile from the Member Center.”。
解决办法:
1.关闭项目,找到项目文件XXXX.xcodeproj,在文件上点击右键,选择“显示包内容”(Show Package Contents)。会新打开一个Finder。
2.在新打开的Finder中找到project.pbxproj,并且打开,找到你所有包含报错的UUID‘XXX’的行,删除。
3.保存,重新启动项目,再编译,就OK了。
No codesigning identities found问题
2016-12-01 15:32:20
这个是在同事的机器上发现的,不知道他做了一个怎么操作出现了一个Reset按钮,他就点了,然后就出现类似的问题:
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“iOS Team Provisioning Profile: *”) were found.
因为账号在我手里,我对证书和provision profile都没有做操作,相信这两项都是没有问题的,然而教他做了各种操作,包括检查证书私钥,重启Xcode等都没有解决问题。这之中我最大的疑惑是他点的这个Reset按钮到底做了什么事情,查了一下,根据这里,在Xcode的帐户setting中点Reset操作,结果是这样的: If you click the Reset button, Xcode revokes and re-creates the corresponding certificate.
但是我同事应该不是在帐户设置里点的Reset按钮,而是在Archive打包时点的Reset按钮。另外一个理由是账户里的证书过期日期不是一年后的今天,我感觉应该是没有创建。但是保险起见,我还是把自己电脑上的证书删掉,然后重新下载开发者账户上的证书并安装(先在钥匙串中删除之前的证书)。似乎并没有解决问题。接着对相关的provision profile点击edit按钮,并点击Generate按钮重新生成(没有删除过),然后下载双击安装(安装之前先在iPhone配置实用工具中删除了旧的)。。在Xcode中重新创建了一个Demo工程,用上面的证书和profile测试并无问题。
接着发给同事测试,仍然不行,待我在他的电脑上操作之后,发现他的Xcode开发者账户选项里有两个相同app id的profile文件,删除了一个旧的,重启Xcode,再操作就没有这样的问题了。
我的一个使用相同证书的工程在Archive打包时出现的却不是上述的错误,而是前面的"your account already has a valid iOS Distribution certificate问题",怀疑也主要是profile invalid的问题。后续再进行测试吧。
参考:
- iOS真机运行时出错(0xE8008018)受难记 -
- 玩志丧物: 苹果 - 企业版开发遇到 Your account already has a valid iOS distribution certificate
- 更新证书错误:No matching provisioning profiles found -