问题
No code signing identity found and can not create a new one because you enabled readonly
背景:
在iOS的app的持续构建中使用了fastlane来管理证书,并且配置脚本命令上传Testflight、Appstore。
在打包过程中,fastlane报了如下截图中错误.
截图:
分析问题步骤:
-
在打包机上通过Xcode检查签名配置(或者在钥匙串中查看本地证书是否都有效)。
首先在执行打包的电脑机器上,通过Xcode打开打包的工程,查看对应iOS target的下的签名配置Signing & Capabilities,检查Debug and Profile、Adhoc、Release环境下,选择的profile证书是否匹配(若不匹配,profile下拉选择框下会有黄色三角)。
-
检查target下的build settings中的signing配置。
确保Adhoc、Debug、Profile、Release对应的配置正确。
3. 问题定位。
第2步中的很好确定,很可能出现问题的就是第1步中的配置。
一般在cer证书没有问题的情况下,出现本文中问题的情况,都是由于profile文件和cer不匹配导致的,我的情况就是如问题截图中一样的。
导致不匹配的一个原因是:打包机上下载的profile,这个profile中的Certificates选择不正确,这是因为原先iOS项目中已经有一个发布证书,但是我用fastlane match重新生成了一个证书,但是fastlane match在生成profile文件时,使用了原先的发布证书。而我打包机上的发布证书,只有fastlane match生成的那个。
4. 总结
发布证书有2个,只有1个是fastlane match通过Apple的API生成的。但是fastlane match命令生成的profile使用的是之前的发布证书。
解决办法:
方法一:
登录Apple certificate证书中心,在profile下,找到在步骤1所示的黄色警告⚠️的profile文件,进入profile详情,点击Edit,确保Certificates选择的是打包机钥匙串中最新的那个发布证书。保存修改后,download这个profile到本地,并双击安装这个profile。
方法二:
(比较有风险,风险点就是需要删除所有的发布证书。如果之前的发布证书或者其p12证书,被使用在其他第三方的平台,则需要更新其他平台上使用的这个证书)使用fastlane match nuke删除所有的证书和profile(或者fastlane match nuke distribution删除发布相关的证书),切记尤其删除了推送证书,那么需要及时更新所有的其他推送平台上的证书。