iOS真机调试证书那些事儿 转载
本文转载自 czh0766 ,http://blog.csdn.net/czh0766/article/details/11578559
时光飞转,日月流梭,转下眼都差不多一年没有这里写过文章了。趁着这些天在公司打酱油之际,加上自己的项目暂时先搁置,今天花了不少时间研究iOS真机调试证书究竟是怎么回事,以前糊里糊涂让程序在真机上跑起来就没有深入研究过中原理,导致每次遇到证书问题都要纠结一番,现在下定决心把这些弄清楚了。
要让真机跑起来,必须要在code signing里选者正确的provision(.mobileprovision)。provision是通过certificate(证书)生成的,并包括了可以调试的设备uuid和对应的appid,只有满足这些条件的设备和app才能使用这个provision跑起来。xcode一般会自动提供一个team provision用于让所有在开发者帐号这册过的设备在所有的app上能运行,这样你就不用专门去制作用于调试的provision了。不过也有例外的情况,如果你的app要使用push notification,in-app purchase等这些功能,还是需要使用只对应该appid的provision。provision分为调试和发布两种,分别由调试证书和发布证书生成,使用发布的provision不能在设备上作调试,使用调试的provision生成的app不能提交到AppStore上。
证书(.cer)是通过CSR(.certSigningRequest)文件生成的,CSR文件通过keychain工具来制作,生成之后会在keychain里保存私钥,苹果通过CSR生成的证书文件则包含公钥信息。这个私钥相当的重要,往往真机调试不了出现code signing invalid就是因为缺少私钥文件。私钥导出的是p12格式文件。
公钥和私钥是如何保证数据安全的,网上有好多资料介绍,简单来说它们是非对称加密方式,用私钥加密的数据要用公钥才能解密,用公钥加密的数据要用私钥才能解密。数字证书相当于网络识别本人的身份证,它包含有公钥的信息所以是公开被别人下载的,而私钥则是本人持有的。本人通过私钥把数据加密发送出去后,持有本人数字证书的机构或个人如果能解密成功,就证明该数据确实是本人发送的,这样数字证书就能起到识别发送者身份的作用。
现在结合自己使用过程中遇到的问题讲下一些情况下的解决方法。如果到一台新的mac电脑上开发,可以在原有的开发电脑上到xcode->organizer->devices->teams,选择其中一个开发帐号导出code signing assets(.developerprofile)文件,这个文件包含了provision,证书和私钥等所有必须信息,然后拷贝到新的mac上点击安装就可以进行真机调试了,这个功能不知道是xcode哪个版本推出的,确实很方便。除了这个方法,还可以导出provison文件和私钥文件(.p12)到新的mac上,点击安装provison后xcode自动会根据里面的信息把证书(.cer)下载回来,可以在keychain里看到,这时候它还没有私钥对应,接着点击安装私钥文件就搞定了。总的来说,provision,证书和私钥这3样文件对开发机来说缺一不可。
如果是使用一台新的ios设备来调试,之前没有在开发者帐号里注册过的,会提示"A valid provisioning profile for this executable was not found.",这时需要在organizer->devices页面里选择这台设备,然后点击Add to Portal注册到一个开发者帐号里,然后就可以用对应这个开发者帐号的team provision作调试了。当然,假如你没有这个开发者的帐号和密码的话,就需要别人帮忙在apple的开发者页面里把你的设备uuid注册了,然后让他导出一个新的provision给你安装。如果是要使用针对特定app的provision来调试,有时候会弹出"The executable was signed with invalid entitlements"提示,我这边的问题是设备没有加入到这个provision里,这时到网站开发者页面把它加上,然后在organizer->devices->provisioning profiles页面刷新就可以了,当然如果你没有帐号和密码的话,还是需要别人来添加设备和导出provisioning文件给你安装。
设备调试证书方面的心得基本上就这么多了,是时候干活去了,以后遇到什么新问题和体会再来补上。