前言:
iOS应用以流畅和安全著称,其中的安全性主要依靠的就是苹果开发中使用的一套证书流程。证书是用来给应用程序签名的,只有经过签名的应用程序才能保证他的来源是可信任的,并且代码是完整的,未经修改的。证书初次使用会感觉流程很复杂,其实对于流程理解了就会觉得简单了。
模拟流程
在讲解之前,我先用现实中的一件事做个比方,这样理解起来简单一点。比如:我要成立一个汽车厂。
- 按照规定,我要先拿到经营许可证,然后拿着经营许可证去政府的车辆审批部门去申请制造汽车的资质证明书,而车辆审批部门会给我发俩个资质证明书,一个搞内部研发的资质证明书,一个可以投入市场的资质证明书,都是只有一年期限。
- 拿到资质证明书后,才可以开始汽车制造。首先我还必须要注册一个商标,这个商标要登记在车辆审批部门,防止别人伪造。
- 然后我拿着研发资质证明书,就可以进行研发了,经过科(加)学(班)规(加)范(点)的研发,车子终于成型,我想投入市场,但是为了安全,最好经过测试合格后才可以。
- 这时候我可以进行内部测试,审批部门每年会给我100个名额,我可以最多找100个人测试,这一百个人不必非要在授权的门店里买车,可以直接试车。需要注意的是,我在进行内部试车的时候,也分俩种情况,一种是在我自己规划的场地进行试车,另一种就是在外面的正常的公路上进行试车,但都是在没有检验合格证的情况下试车的。
- 试过之后,我就可以拿着投入市场的资质证明书给车检部门发出申请,然后他们要对我的车子进行检验审核,没有问题了,给我一个检验合格证,我就可以正式投入市场了。
- 投入市场后,来买车的人会看到我的资质证明书和我注册的商标以及检验合格证就可以确定这是正品,就可以放心来买了。
- 如果我想在车上安装导航系统,同样的也要申请俩个证书,一个开发导航资质证明书,一个发布导航资质证明书,同样是需要和商标绑在一起,一年期限。当然我也可以委托第三方厂家给我开发,只要我提供俩个资质证明书即可。
实际开发流程
接下来,就回到iOS中的开发流程中来。
- 首先我需要一个开发者账号,分为个人账号(Individual) 和 公司团队账号(Company/Organization)和企业账号(Enterprise)三种类型,个人和公司团队都是99美元一年,可以发布到AppStore上,每年可以有100个苹果的iOS设备测试。企业账号是299美元一年,但是不能发布到App Store,只能企业内部应用,苹果的iOS设备数量不限制。就好比我生产的车不能发布到市场上,只能在自己的地盘上试验,一旦上路就是黑车了,被检查到会被吊销营业资格。
-
有了账号,就可以申请经营许可证了,也就是通过Keychain(钥匙串)的证书助理从证书颁发机构请求证书。
结果keychain 将生成一个包含开发者身份信息和公钥的CSR(Certificate Signing Request)文件。私钥 private key始终保存在 Mac OS 的 Keychain Access 中,用于签名(CodeSign)本机对外发布的 App;公钥 public key 一般随证书散布出去,对 App 签名进行校验认证。用户必须妥善保存本地 Keychain 中的 private key,以防伪冒。
-
使用CSR文件到开发者中心申请证书。首先要了解几个概念,Certificates(证书),Identifiers(标识符),Devices(设备),Provisioning Profiles(描述文件)。页面如图所示:
Certificates(证书)就是到车辆审批部门去申请的资质证明书,Identifiers(标识符)就是车的商标,Devices(设备)就是可以试车的那100个人,Provisioning Profiles(描述文件)就是包含了证书,标识符和设备的文件,也就是客户试车的时候的凭证。申请证书页面如图:
- 接下来去申请一个App ID,也就是去申请一个汽车商标。在“ Identifiers”一栏下选择“App IDs”,可查看所有已申请的App IDs,点击右上“+”,需要注意,App ID一般是反域名格式,如:com.company.test。在“App Services”栏下选择应用使用到的服务(如要使用推送功能,勾选“Push Notifications”)。
- 添加调试设备,也就是可以试车的人员,使用UDID来标识每一台设备都有唯一性,注意,一年只有100个名额,即使删除掉也算用去了一个名额。
-
添加描述文件(Provisioning Profile),描述文件和证书的环境相对应。描述文件就类似于售车时,给客户列出的一系列合法文件证明。
1.Provisioning Profile决定Xcode用哪个证书(公钥)/私钥组合(Key Pair/Signing Identity)来签名应用程序(Signing Product),将在应用程序打包时嵌入到.ipa包里。
2.Provisioning Profile把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用。这样,只要在不同的情况下选择不同的Provisioning Profile文件就可以了。
3.Provisioning Profile也分为Development和Distribution两类,有效期同Certificate一样。Development版本的ProvisioningProfile用于开发调试,Distribution版本的ProvisioningProfile主要用于提交App Store审核,其不指定开发测试的Devices。
4.Xcode 将全部供应配置文件(包括用户手动下载安装的和 Xcode 自动创建的Provisioning Profile放在目录 [~/Library/MobileDevice/Provisioning Profiles] 下。
生成成功后的Provisioning Profile下载到本地,双击会自动安装到xcode中。
7.最后,如果需要开通推送功能,还需要再申请俩个推送证书,流程同开发证书一样。也可以使用第三方推送平台,但是得提供俩个环境的推送证书。
一切准备完毕,这时候就可以打包提交到AppStore进行审核了,类似于车检部门进行审核,审核通过后发到AppStore市场上,就类似于拿到了检验合格证了。
iOS开发中的证书使用的流程就是这样了,希望本文能帮助到你更好的理解iOS开发。
参考:
iOS Provisioning Profile(Certificate)与Code Signing详解
苹果IOS开发者账号总结
iOS开发证书与配置文件的使用