关于 iOS 证书,你必须了解的知识

从事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调试设备的加入,确保随时有可用名额。

相关推荐

经验之道:最有效的iOS内存泄漏检测

iOS 启动连续闪退保护方案

iOS高性能图片架构与设计

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

陈泽滨的专栏

1 篇文章2 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python和你

Python爬虫+颜值打分,5000+图片找到你的Mrs. Right

本项目利用Python爬虫和百度人脸识别API,针对简书交友专栏,爬取用户照片(侵删),并进行打分。 本项目包括以下内容:

763
来自专栏阮一峰的网络日志

谈谈MVC模式

1. 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。 MVC模式就是架构模式的一...

2655
来自专栏腾讯云TStack专栏

Pike版本变慢,不慌,看云计算十年老兵教你一招化解

1343
来自专栏机器之心

资源 | 挑战谷歌,Facebook 发布交互数据可视化工具 Visdom

选自GitHub 机器之心编译 参与:微胖、吴攀 FAIR 发布了 Visdom,一款可在 Torch、PyTorch 以及 NumPy 上实现交互式数据可视化...

2238
来自专栏PPV课数据科学社区

从0到1掌握R语言网络爬虫

引言 网上的数据和信息无穷无尽,如今人人都用百度谷歌来作为获取知识,了解新鲜事物的首要信息源。所有的这些网上的信息都是直接可得的,而为了满足日益增长的数据需求,...

3114
来自专栏java一日一条

Android性能优化案例研究(上)

这是Google的Android开发工程师Romain Guy刊登在个人Blog上的一篇文章。Romain Guy 作为Android图形渲染和系统优化的专家,...

561
来自专栏视频加密

在线视频加密功能解析

在线视频加密可以防范视频所有者辛苦录制的视频课程被恶意盗用,在线视频加密可以实现哪些功能呢?

1475
来自专栏FreeBuf

利用开源工具TempestSDR实现屏显内容远程窃取

你可能还不了解“TEMPEST”,它是用来窃取远程视频信息的一种基于软件定义的无线电平台技术,可被当做间谍工具包使用,用来针对某些目标电子设备的射频信号(声音和...

2025
来自专栏Data Analysis & Viz

图表太丑怎么破,ECharts神器带你飞!

在本专栏或文集中,我曾多次使用ECharts绘制图表、进行可视化,也渐渐积累了30多个实例,本文对此前用过的所有图表和代码进行整理并分享,以给想绘制精美图表的人...

2442
来自专栏前端小作坊

CSS硬件加速的好与坏

每个人都痴迷于60桢每秒的顺滑动画。为了实现这个顺滑体验现在用的最流行的一个做法就是使用『CSS硬件加速』。在一些极端例子中,强制使用translate3d意味...

772

扫码关注云+社区