iOS开发中Certificate和Provisioning Profile和app ID的关系

前言

iOS开发中肯定会接触到苹果的Certificates, Identifiers, Devices, Provisioning Profiles,然后按照网上的教程一步一步配置完成并成功运行调试,但是还是对其中的缘由一知半解。本文就是博主自己去查阅资料并整理相关的知识点来梳理这些关系,如果哪里不对或者理解错误还希望能帮忙指出。如果能给出文档出处的链接,感恩。

目录结构

按照下图来介绍

appledevelopercenter

Certificates

证书是用来签名的,是用来证明某某东西确实是某某东西的东西(是不是像绕口令?)。通俗地说,证书就好比公章(假设这个公章是真的)。比如你结婚也是要盖章的(结婚章),只有盖了章(结婚章)才能证明你们是结婚了的。我们这边说的证书就是用来给应用程序(APP)签名的,只有经过签名的APP才能保证它的来源是可信任的,代码是完整的没有经过修改的。

我们在申请一个Certificate之前,需要先申请一个Certificate Signing Request(CSR)文件,而这个过程中实际上是成了一对公钥和私钥,保存在你Mac的Keychain中。代码签名(Code Signing)就是使用这种基于非对称秘钥的加密方式。用私钥进行签名,用公钥进行验证。如下图所示,在你Mac的keychainlogin中存储着相关对应的公钥和私钥,而证书中包含了公钥。你只能用私钥进行签名(公钥只是用来验证签名的),如果你没有了私钥,就不能进行签名,也就无法使用这个证书,你只能revoke之前的证书再申请一个。因此在申请完证书时,我们都会(从keychain)导出并好我们的私钥。当你想和公司的其他开发者或者在其他开发设备上共享证书时,把私钥给他装上就行。私钥保存在你的Mac中,而Apple生成的Certificate中包含了公钥(没包含私钥).当你用自己的私钥对代码签名后,苹果就可以用证书里面的公钥来进行验证,确保是你在对代码进行了签名,而不是别人冒充的,这样子就保证了APP来源的可信任和代码是完整的没有经过修改的。

keychain

详细的说明可以看App Distribution Guide.

我们开发中使用的证书有2类:Development和Production, Development证书是用来在开发阶段进行开发和调试的APP的, Production是用来分发APP的.(分发:即让用户下载APP的意思),分发有In-HouseAd Hoc,前者是企业证书特有的,关于In-HouseAd Hoc的区别:In-House没有设备数量的限制,而Ad Hoc是用来测试用的,Ad Hoc的包只能运行在该账号内已经登记的可用设备上,所以最多只能有100个设备能安装你的APP。

Identifiers

App ID:用来标识一个或者一组App,App ID是要和Xcode的Bundle ID保持一致或者是匹配的(通配)。

App ID分为下面2种:

  • Explicit App ID:唯一的App ID,这种App ID用于唯一标识一个APP.
  • Wildcard App ID:通配符App ID,用于标识一组APP.

每创建一个App ID,我们都可以设置该ID所需要使用的APP Services,即该App所需要使用的其他服务。

Devices

Device就是能运行你APP的设备。Devices中包含了该账号中所有可用于开发和测试的设备UDID。每个账户中的设备数量限制是100个。假设你已经包含了100台设备,然后希望101这台设备能加入该账号下,于是你把100这个设备解除绑定,然后添加101这个设备.这是不可能这样子操作的,只能在membership year开始的时候才能这样子操作。

Provisioning Profiles

一个Provisioning Profile文件包含了上述的内容:Certificate, App ID, Devices
我们要打包或在真机上运行一个APP

  1. 首先用证书来进行签名,用来标识这个APP是可信任的,完整的等等。指明它的App ID,并且验证Bundle ID是否一致。
  2. 如果是真机调试,需要确认这台设备是或包含在该账号下的测试设备中,以此来决定是否能运行程序。

Provisioning Profile就是把这些信息全部囊括在一起,方便我们在调试和打包时使用,这样子我们只要在不同情况下选择不同的profile文件就行了。这个Provisioning Profile文件会在打包时嵌入到包内。

如下图所示:

一个用于developer的Provisioning Profile文件中包含了该Provisioning Profile对应的App ID,可使用的证书和设备。表示使用这个Provisioning Profile打包App需要拥有对应的证书,并且是将App ID对应的APP运行到Devices中包含的设备。

Provisioning Profile

下图是在一台设备上运行APP时需要做的验证示意图:

app launche

Zerlz wechat
扫码关注一个很懒的程序员!
Winter is coming, give me a penny!