前言:
刚刚把mini换成了macbookair,之前一直在mini上进行开发,到换air之前,第一个项目刚刚上线,第一次申请
测试,发布证书等等都是在mini上完成的,由于粗心未能料到,换成air后,就把mini的全部清空,然后二手卖了,之前的开发证书也被我删除了,其实应该备份和导出的。。。。
导致现在在新air上,登陆网站:
想直接下载之前建立好的证书,可是下载双击后,在钥匙串里发现:
总是感觉少点东西,终于发现,我们download的这个证书没有之前开发电脑上的小钥匙了,就是所谓的私人秘钥。
然后在网站的provision标签里下载项目的provisioning文件,看看效果如何:
下载后双击,打开Xcode----organizer,看一看provising files里的status,坏了:
系统识别不了了,也就是说,我们缺少那个之前开发电脑的个人秘钥,就是按照当时首次真机调试网上流程,生成
CertificateSigningRequest.certSigningRequest上传,下载的那个私人证书秘钥!!
你是不是也遇到了我这种情况,而现如今,之前开发时的电脑还找不到了,也就是说,无法导出来了。
1,Valid
signing identity not found解决办法
解决办法:
一:沿用原来的证书
找到之前开发电脑的证书,导出-导入,这是最简单简便省事的方法!
1,在原来电脑上点开钥匙串访问 工具,找到我们iphone developer 开发证书,然后右键导出
注意那条小钥匙,必须带这个才能导出p12。
右击证书,导出,(p12方式),输入密码,这个密码任意,记住就好。
然后将这个文件拷到新电脑,双击导入,输入刚刚的密码即可。
如果Organizer里面没有显示,则再次双击mobileprovision证书,就可以看到绿 {MOD}的“Valid profile”。大功告成!
通过P12和证书文件,使用另一Account真机调试
如果你想使用别人的account来真机调试,确保他会发给你以下文件:证书文件、授权文件和p12文件
双击development和distribution的cer以及他们的p12文件(有秘钥的话需要输入秘钥),自己的钥匙串会有如下:
再双击dev和distProfile文件(mobileprovision)然后在自己项目的TARGETS和PROJECT中更改Provisioning Profile和Code Signing,更改profile为对方account的Developer和Distribution,如下:
最后,运行如果失败,如下提示:
查看工程的PROJECT下的Code Signing是否更换成了目标account证书,如果没问题,确保目标account添加了你真机测试的Devices!
二、revoke掉,重新生成(建议只有在原来的找不到的情况下)
删掉钥匙串里所有的相关证书,主要是下面这个:
然后到
Provisioning Portal,
删掉以前的东西,重新来一次,revoke。
revoke后,发现又回到了最初时的状态,如下图:
很熟悉的样子,又回到了我们第一次上传私钥的步骤,我们在重新制作证书前,先看一下此时distribution标签下的发布证书还有没有,如下图所示,发布证书么有收到牵连,还存在,表明还可以使用:
继续看一下devices栏下的设备是否存在:
继续看一下provisioning files 是否还存在,貌似status变成了invalid的,不过后面有modify选项,貌似可以激活,回头等更新版本时,再来尝试:
继续切换distribution标签的provision files,status还是活跃的,到目前为止,仿佛明白,真机调试,需要具备私钥+(公钥);而发布时,拥有符合的公钥就可以了?
继续下一步,我们看看APP ID 还是否存在,如下图所示:跟之前的一样
综上所述,revoke后,只有对调试的provision files有些影响,其余的都可以照常使用,哪么,我们就可以放心的重新制作证书啦。
我们用钥匙串工具,生成本地的私人秘钥(CertificateSigningRequest.certSigningRequest),通过点击网页上的request Certificate 上传后,apple验证我们的开发者身份,并签名生成(私有+公有)开发证书,按照当时创建的教程再重复一遍。
双击新制作的ios_development.cer之后再打开xocde-organizer,就会发现,provisioning files可以使用了(记得在网站上modify后再下载下来)
2,在MAC下建立多用户进行ios开发时证书和Provisionfile的问题
情景:在一台MAC机上,创建了一个新的用户,然后切换到新用户下,进行ios开发,此时发现真机连接后,在Organizer提示Valid signing identity not found~~~我尝试把主用户下的私钥和证书都拷贝到新用户下,还是不行。可是我在切换回主用户下,一切又没问题了,由此推断:【同一台电脑,建立不同的用户,钥匙串不能共享?】
所以我们目前只有公钥,缺少一个私钥,mac os 下,不同的用户,相当于不同的mac了,我们只能各自生成一个私钥。接下来的步骤,你应该都是熟悉的,打开developer.apple.com网站
1,添加Add iOS Certificate
(如果IOS APP Development不能选择,那么说明你需要revoke掉一个development证书了)
2,在当前用户下生成私钥
钥匙串访问-证书助理-从证书颁发机构请求证书-邮件-名称-存储到磁盘=生成-
CertificateSigningRequest.certSigningRequest,然后网站提交,生成一个新的development证书。
3,download新的证书,双击添加到钥匙串里,此时你的新用户下已经有了新的公钥和私钥,那么我们还缺一个provisionfile,打开要使用的provision file-edit,
把我们新创建的development证书添加进来,保存,接下来,就可以再次进行真机调试了,注意先要把手机上原有的provisionfile删除掉,重新添加。至此,打开Organizer,会发现status = Valid profile了。
3,AppleWWDRCA.cer、Development Certificates、App ID、Devices和Provisioning Profiles之间的区别和联系
AppleWWDRCA.cer先来看官方的解释:
在网站的Certificates项中选择-Add
iOS Certificate,底部会有这样的描述:
E文不好的可以google翻译一下,大体的意思是如果我们想创建自己的证书(certificate),必须首先要有Apple的中间签名证书(AppleWWDRCA.cer),也就是说首先要下载Apple的中间签名证书,下载后双击就可以添加到钥匙串里了(或许还会自动添加到Xcode),如下图所示:
有了它,我们就可以创建自己的开发者证书,进而进行真机调试或程序发布了,这个东西只需要
下载一次就可以了,即便我们有多个IDP,有不同的开发者账号,只需要一个足矣,如果不小心删掉了或是换了电脑,再点击下面的连接下载便可以了。
CertificateSigningRequest.certSigningRequest官方的解释:
With the creation of your CSR, Keychain Access simultaneously generated a public and private key pair. Your private key is stored on your Mac in the login Keychain by default and can be viewed in the Keychain Access application under the "Keys" category. Your
requested certificate will be the public half of your key pair.
Download your certificate to your Mac, then double click the .cer file to install in Keychain Access. Make sure to save a backup copy of your private and public keys somewhere secure.
Development Certificates分为 Development和Production(Distribution)前者是开发证书,关系到真机调试,后者是发布证书,关系到发布到AppStore。
创建Development证书时,需要在电脑通过钥匙串生成一个私人秘钥,这就是:
CertificateSigningRequest.certSigningRequest 简称CSR,相当于跟Apple说:"我这里有台MAC mMac"!也就是说pending好的development证书相当于某台MAC机上某一个开发者的标识,所以说,团队开发时,不同的开发者应该都要有独自的development证书。
App ID 相当于你创建的某一个工程(项目)的唯一标识,体现在项目中就是创建时填写的Bundle Identifier,在网站添加app id的作用相当于跟Apple说:“我这里有个APP mApp”!
Devices 相当于你的真实测试设备:iphone、iPad、mini等,每一台设备都有identifier(UDID),只有添加到网站上,才会是被apple承认的合法的测试设备,所有的测试设备都要添加进来,相当于跟Apple说:“我这里有台Device mDevice”!
Provisioning Profiles 分为Development和Distribution 前者是开发,关系到联机测试,后者是发布,关系到上传APP到Store。创建时首先要选择类别、其次 App ID(程序的 bundle identifier,我们创建的App ID )、再次选择certificates,也就是说允许哪些个开发者(可多选),最后选择devices,也就是说允许安装在哪些设备(可多选)。所以,无论是Development和Distribution,provisioning
file只跟app id绑定,也就是每个App都应该有独自的pro profile。但是一个APP可以允许不同的开发者,在不同的多个设备上调试!所以,Provisioning Profile相当于跟Apple说:"我想 在我的mMac上面,连接到 mDevice ,跑myApp这个app"!
所以综述,Provisioning profile是把 development、App id、device连接起来的桥梁,表面上来看,它跟Appid 和device有关联,你edit某一个profile时,可以随意设置AppID(配置到哪一个APP)、Certificates(允许哪些开发者)、device(允许哪些设备)。
Provisioning profile是否跟mac(development certificate)有关?
也就是说如果我把mMac吊销了,自己又在新的电脑上提交CSR创建了一个新的 mMac2(development certificate),此时之前的provisioning profile还可以继续用吗?
答案是肯定的!不然在创建provisioning profile时,不会让你选择多个MAC(certificates),之所以允许选择多个certificates,本意就是允许团队中不同的开发者,在不同的电脑上使用同一个provisioning profile!
你只需要编辑这个provisioning profile把自己新创建的mMac2(certificates)添加进来就可以了,然后在真机里删除原有的profile、download新的profile添加到真机,就没问题了。
附下传送门,我曾经无知时的提问,现在恍然大悟:
http://www.cocoachina.com/ask/questions/show/97151