本文结合作者的工作经历对iOS的证书(certificate)及配置文件(provisioning profile)做个总结。


1. 发布流程

wKioL1cMnn7AVMhsAABhociPLMo999.png

在开发及发布过程中,都会用到证书及相关的配置文件。规范的配置可以保证你的应用在上架后不会因为证书问题被审核拒绝或者影响用户使用。


2. 代码签名(Code signing)

只有通过代码签名的应用才能保证其来源是可靠的,并且代码是完整的、没被更改的。代码签名由签名标示(signing identity)及配置文件(provisioning profile)共同构成。

wKioL1cMoMLxPkK-AAQg3aDQSYI611.png


签名标识(由苹果提供的算法生成的一对公私钥组成),Xcode通过你的签名来创建应用。

wKioL1cMnf6Tmjf7AADmhn6oAWE889.png

如图所示,Juan Chavez上传他的公钥到苹果,用以生成属于他的开发/产品环境证书(certificates),持有他私钥的电脑生成的应用才能匹配成功,从而保证编译/提交成功的第一个条件。编译需要在本机安装开发环境的.cer证书,发布需要在苹果官方持有有效的产品.cer证书。


保证编译/提交成功的第二个条件是配置文件(provisioning profile)。该文件在苹果开发者后台中生成,关于如何生成,参考3.2。


3. 证书、配置文件

如果你恰好拥有APP的后台管理员权限,那么在苹果开发者后台将可以查看到"Certificates, IDs & Profiles"菜单。该目录下,有Certificates, Identifiers, Devices & Provisioning Profiles四个二级菜单。它们的关系用一张图来表示:

wKiom1cMpUXyeANTAAETH44OykQ017.png



(1) 证书(Certificates)

证书是用于应用签名的,证书包含开发(development)和产品(production)两套环境。

wKioL1cMmCOj531zAAIdw9xm7lw024.png

一般而言,开发环境会为每位开发者创建一个开发者证书,发布版本会有一个共同的产品证书。此外,如果应用包含其他的调用服务,如通知 (app push notification service),则会单独生成相应的证书。


生成证书的步骤就不再累述了,按引导完成即可。


(2) 配置文件(Provisioning Profiles)

相对于证书(certificates),配置文件(provisioning profiles)也有开发/产品两套。

用于开发的配置文件(iOS Development)

该文件主要用于开发者在沙盒手机上测试,因此创建该配置文件时,需要勾选相关的开发者证书(哪些开发人员编译的包有权限运行),及相关沙盒手机设备(该设备在Devices中注册)。

用于发布的配置文件(iOS Distribution)

该文件用于上传包到TestFlight及苹果应用商城。因此创建该配置文件时,需要勾选用于发布的证书。


值得注意的是,一旦任何的证书失效,其相关的配置文件也将变得无效,此时可以重新生成新的证书,但只需要编辑对应的配置文件,刷新它的相关证书即可。


在Xcode中开发/发布切换证书及配置文件:

wKioL1cMpWqDlCyaAAK8fZi0zf4708.png


4. p12文件

如上述所示,证书(certificates)是验证应用是否有效的凭证。但证书都是直接安装在mac系统里的,如何让它导入到其他系统中,以便通过该应用ID去请求苹果的其他服务(如通知等)?


这个时候,就需要用到.p12文件。.p12文件是通过特殊格式化及加密处理的,包含应用证书的文件。其导出方式如下:

wKioL1cMql-yWSXcAAHyW0od74E170.png

wKiom1cMqarBeitMAABLFuK62YY831.png

wKiom1cMqauSq-s_AABtA22xAOc993.png

wKioL1cMqmCQY4XIAABqO8ZsozU080.png

wKioL1cMqmCDrYeYAAA-MEpekn4755.png

在很多的移动应用代理平台,既是用.p12的方法,让用户提交自己应用的p12文件到代理平台,由平台来中转相关请求/响应。


此外,由于用于发布的证书有且只能有一个处于激活状态,而证书的生成只能包含一个开发者ID的私钥。如果团队中需要多人承担发布版本的职能,目前能想到的办法为:

  1. 创建一个专门用于发布版本的开发者ID,用其绑定发布证书

  2. 导出该开发者ID证书的.p12文件,并分享给相关发布人员

  3. 发布人员发布版本时,通过公共开发者ID打包发布


如果读者有更好的办法,请赐教,谢谢。

希望这篇文章能为你带来帮助!


相关资料:

About App Distribution Workflows

Maintaining Your Signing Identities and Certificates

Maintaining Identifiers, Devices, and Profiles