收录待用,修改转载已取得腾讯云授权


最新腾讯云技术公开课直播,提问腾讯W3C代表,如何从小白成为技术专家?点击了解活动详情

作者 |陈泽滨
编辑 | 顾乡

从事iOS开发几年,越来越发现,我们的开发者往往聚焦在程序的开发,如何实现一个功能,如何写好一行代码。但对iOS应用开发到发布过程中必不可少的一环,证书签名相关部分,却只是一知半解。真正过程中遇到问题:如真机调试、团队开发证书环境同步,产品发布上架,才胡乱折腾一通,最终解决问题的时候其实对证书的构成与机理还是一无所知,不知所以然。

本文从iOS证书体系的基本构成模块 (Certificates, Identifiers, Device, ProvisioningProfile) 入手,一步步解释各模块的内容与注意项;同时文末简单补充了iOS证书日常管理经验项。力求为大家答疑解惑,补上iOS应用开发中不可或缺却往往被人忽视的一个知识面。

1. 证书(Certificates)

代码签名可以让系统确保你的应用来源,并确保你的应用不被修改(执行代码修改后,原签名将失效)。

首先你要有一个证书,通过Keychain的证书助理生成Certificates Signing Request文件后,即可进一步得到最后的证书。完整的iOS证书包含公钥与私钥,也就是所谓的非对称加密方式。在这里,公钥用于验证,私钥用于签名。与此同时,仅包含公钥的证书文件(.cer)将会被放置在开发帐号下提供到开发团队人员下载共享使用。然而,我们知道仅包含公钥的证书是不具备签名能力,而私钥又保存在生成证书的机器Keychain内,所以当其他开发人员需要使用这份证书时候,我们需要将完整的公钥私钥导出生成个人信息交换文件(.p12),这样的证书环境才是完整可用的。

特别值得一提的是,我们日常遇到的revoke证书,也就是因为开发人员当下的开发环境没有包含可用的私钥,revoke相当于重新申请证书,暴力操作过后其他开发人员的旧证书(包含私钥)将不可用,需要revoke的开发人员将最新的证书信息同步出来。

证书分为开发(Developerment)与发布(Distribution)两类,各自用途顾名思义,这里不再累述。

2. Identifiers

注册一个AppID用于唯一标识一个App或一组App,这里的应用程序AppID和BundleID是相对应的。为了确保AppID的唯一性,它的命名必须严格按照规范:

1、App(主程序、插件)BundleID:

com.company.appname

com.company.appname.extensionname

2、AppGroupsID:

group.com.company.appname

3、Pass TypeID:

pass.com.company.appname

4、Website PushID:

web.com.company.appname

5、iCloud Containers ID:

cloud.com.company.appname

6、Merchant ID:

merchant.com.company.merchantname

每个AppID可以设置对应的服务开关(如APNs、Game Center、iCloud等等),生成同时按照实际需要对应配置即可。

3. 设备(Device)

这里的设备就是指的可调试的iOS设备,可以是iPhone、iPad、iPod、Apple Watch甚至是Apple TV。新增一个设备到帐号下可以进行设备调试,仅需要提供对应名称与UDID,但是,一个萝卜一个坑,一个帐号最多仅支持加入100个设备,即便你后续删除设备,用掉的名额也不会立刻恢复,直到来年开发者帐号的membership year开始时,才能选择删掉一些设备来恢复名额,或清空所有设备恢复到最多100个名额。

4. 描述配置文件(Provisioning Profile)

Provisioning Profile文件将上文提及的相关信息(Certificates、Identifiers、Device)都打包在内。Provision Profile本质上是一个plist文件,以development为例,它一般包含但并不只以下内容:

1、AppIDName

2、ApplicationIdentifierPrefix

3、CreationDate

4、DeveloperCertificates

5、Entitlements

6、ExpirationDate

7、ProvisionedDevice

8、UUID

系统根据配置文件提供的信息进行一一校验,从AppID到Entitenments,从数字证书到设备UDID等,最后运行应用程序到设备。如下所示:

此外,DistributionProvisioningProfile与Development Provisioning Profile类似,它没有Device配置信息。

5. iOS证书管理

开发团队的人员越多,合理的证书管理愈显重要。流程上,为保证日常开发应用程序的安全与效率,无论是大到公司的发布证书抑或是小到项目组的团队个人开发证书,我们都尽量做到:

1、帐号密码统一由一个关键接口人维护(证书管理员);

2、开发人员统一到证书管理员领取.p12文件与Provision Profile文件进行应用开发或发布;

3、新增设备,提供设备名与UDID到证书管理员添加。证书管理员更新后,周知并同步新的ProvisioningProfile到团队开发人员。

补充提醒:

1、.p12文件与Provisioning Profile文件同步到svn,可高效并及时同步整个团队;

2、严格控制iOS调试设备的加入,确保随时有可用名额。


原文链接:https://www.qcloud.com/community/article/628343

关于 iOS 证书,你必须了解的知识的更多相关文章

  1. iOS证书发布推送相关知识科普

    账号种类 1.企业账号 299美刀 -- 可以自己发布App,不能发布到App Store 2.个人/公司账号 99美刀 -- 可以发布到App Store, 不可以自己发布不限安装数量的App 个人 ...

  2. iOS 证书申请和使用详解(详细版)

    对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成员介绍 1.Certification(证书) ...

  3. iOS证书申请及使用详细说明

    iOS 证书申请和使用详解(详细版)阅读   对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成 ...

  4. iOS 证书申请和使用详解(详细版)阅读

    对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成员介绍 1.Certification(证书) ...

  5. iOS证书失效

    iOS证书突然失效 今早上班打包直接报错,错误如图 根据错误信息到“钥匙串”里面看了一下证书,证书都莫名其妙的失效了,昨天还是好好的. 重新去钥匙串从证颁发中心获取证书,然后登陆开发者账号重新申请证书 ...

  6. IOS证书/私钥/代码签名/描述文件

    1.   相关资源 (1)   钥匙串程序(常用工具->钥匙串),用于创建证书请求.安装证书.导出私钥等 (2)   IOS开发中心:https://developer.apple.com/de ...

  7. ios证书

    内容提要: 安装app时提示 “无法下载应用,此时无法安装“XXX””.我遇到过多次是由于ios的app出现证书问题.本篇文章讲解用ios证书制作过程,以及每个步骤的解释. 正文: Xcode签名至少 ...

  8. iOS证书申请详细流程

    一.事前准备 1.1 准备苹果帐号 首先您需要有一个苹果的开发者帐号,一个mac系统.如果没有帐号可以打开申请加入苹果的开发者计划.如何申请网上有详细的介绍,在此不多做介绍. 如果您已经有了一个帐号, ...

  9. iOS 证书调试的理解(Personal)

    证书签名 证书:众所周知,我们申请一个Certificate之前,需要先申请一个Certificate Signing Request (CSR) 文件,而这个过程中实际上是生成了一对公钥和私钥,保存 ...

随机推荐

  1. ZOJ1003 Crashing Balloon

    Crashing Balloon Time Limit: 2 Seconds      Memory Limit: 65536 KB On every June 1st, the Children's ...

  2. RabbitMQ消息队列(一): 简单队列

    1. 示例选用python的pika模块进行测试,需要预先安装pika模块: https://pypi.python.org/pypi/pika/0.10.0#downloads 上述地址下载源码,加 ...

  3. UVALIVE 4330 Timer

    Description   Recently, some archaeologists discovered an ancient relic on a small island in the Pac ...

  4. 原型和JS内置对象

    原型 1.定义 每一个对象都有原型 原型仍然是一个对象 模拟实现面向对象的继承性 2.原型链 对象的原型还有原型 对象除了可以使用自有属性还可以继承原型上的属性 3.获取原型 对象.__proto__ ...

  5. [ Centos 7 iscsi搭建 及 1台客户端同时挂载多台iscsi服务端问题 ]

    一.什么是iscsi iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千 ...

  6. python接口自动化12-案例分析(csrfToken)【转载】

    前言: 有些网站的登录方式跟前面讲的博客园和token登录会不一样,把csrfToken放到cookie里,登录前后cookie是没有任何变化的,这种情况下如何绕过前端的验证码登录呢? 一.登录前后对 ...

  7. 微信支付报错:统一下单和拉起支付的appid不一致(原创)

    微信支付报错:统一下单和拉起支付的appid不一致 错误码:-2 提示参考: 参考统一下单的API (谦信君原创,转载请注明来源) 原因排查: 我们做的是APP微信支付 客户端向我服务端发请求,获取预 ...

  8. yii2.0在model里自定义数据表

    无需多言,直接撸代码 class Zhuanjia extends \yii\db\ActiveRecord { public static function tableName() { return ...

  9. 洛谷 P2689 东南西北【模拟/搜索】

    题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地.求到达终点的最少时间. 如果无法偏移至终点,输出“-1”. 输入输出格式 输入格式: 第一行 ...

  10. 51nod 1137 矩阵乘法【矩阵】

    1137 矩阵乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出2个N * N的矩阵M1和M2,输出2个矩阵相乘后的结果.   Input 第1行 ...