引言
关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做 开发的同学没少被折腾。对于一个 iOS 开发小白、半吊子(比如像我自己)抑或老兵,或多或少会有或曾有过以下不详、疑问、疑惑甚至困惑:
- 什么是App ID?Explicit/Wildcard App ID有何区别?什么是App Group ID?
- 什么是证书(Certificate)?如何申请?有啥用?
- 什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联?
- 什么是签名(Signature)?如何签名(CodeSign)?怎样校验(Verify)?
- 什么是(Team)Provisioning Profiles?有啥用?
- Xcode如何配置才能使用iOS真机进行开发调试?
- 多台机器如何共享开发者账号或证书?
- 遇到证书配置问题怎么办?
- Xcode 7免证书调试真机调试
本文将围绕相关概念及背景做个系统的梳理串烧,于条分缕析中对证书体系进行抽丝剥茧,逐步揭开签名机制的神秘面纱。图穷匕首见,水落而石出,包教不包会,不会请再来。
从 Xcode 7 开始支持普通 Apple 账号进行免证书真机调试,详情参考最新官方文档《》,或参考本文最后一节简介。
写在前面
1.假设你使用过 Apple 设备(iMac/iPad/iPhone)且注册过 Apple ID(Apple Account),详情参考《》。
2.假设你或你所在的开发组已加入苹果开发者计划(Enroll in iOS Developer Program to become a ),即已注册开发者账号(Apple Developer Account)。
- 只有拥有开发者账号,才可以申请开发/发布证书及相关配置授权文件,进而在 iOS 真机上开发调试 Apps 或发布到 App Store。
- 开发者账号分为 Individual 和 Company/Organization 两种类型。如无特别交代,下文基于 $99/Year 的普通个人开发者(Individual)账号展开。
3.若要真机调试实践,你必须至少拥有一台装有 Mac OS X/Xcode 的 Mac 开发机(iMac or MacBook),其上自带原生的 Keychain Access。
一.App ID(bundle identifier)
在苹果官方的开发者计划(Apple Developer Member Center)层面,App ID 即 Product ID,用于标识一个或者一组 App。
在 Mac/iOS 开发语境中,(捆绑) 是指一个内部结构按照标准规则组织的特殊目录。在 Mac OS 应用程序目录下的某个 *.app 上可右键显示包内容(Contents),其本质上就是可执行二进制文件(MacOS/)及其资源(Resources/)的。因此,在 Xcode 中配置的 Bundle Identifier 必须和 App ID 是一致的(Explicit)或匹配的(Wildcard)。
App ID 字符串通常以反域名(reverse-domain-name)格式的 Company Identifier(Company ID)作为前缀(Prefix/Seed),一般不超过 255 个 ASCII 字符。
App ID 全名会被追加 Application Identifier Prefix(一般为 TeamID.),分为两类:
- Explicit App ID:唯一的 App ID,用于唯一标识一个应用程序。例如“com.apple.garageband”这个 App ID,用于标识 Bundle Identifier 为“com.apple.garageband”的 App——GarageBand;“com.tencent.mqq”则为 的 App ID。
- Wildcard App ID:含有通配符的 App ID,用于标识一组应用程序。例如“*”(实际上是 Application Identifier Prefix)表示所有应用程序;而“com.apple.*”可以表示 Bundle Identifier 以“com.apple.”开头(苹果公司)的所有应用程序。
用户可在 Developer Member Center 网站上注册(Register)或删除(Delete)已注册的 App IDs。
App ID 被配置到【XcodeTarget|Info|Bundle Identifier】下;对于 Wildcard App ID,只要 bundle identifier 包含其作为 Prefix/Seed 即可。
二.设备(Device)
Device 就是运行 iOS 系统用于开发调试 App 的设备。每台 Apple 设备使用 (Unique Device Identifier)来唯一标识。
iOS 设备连接 Mac 后,可通过 iTunes->Summary 或者 Xcode->Window->Devices 查看其。
Apple Member Center 网站个人账号下的 Devices 中包含了注册过的所有可用于开发和的设备,普通个人开发账号每年累计最多只能注册100个设备。
- Apps signed by you or your team run only on designated development devices.
- Apps run only on the test devices you specify.
用户可在网站上注册或启用/禁用(Enable/Disable)已注册的Device。
本文的 Devices 是指连接到 Xcode 被授权用于开发测试的iOS设备(iPhone/iPad)。
三.开发证书(Certificates)
1.证书的概念
证书是由公证处或认证机关开具的证明资格或权力的证件,它是表明(或帮助断定)事理的一个凭证。证件或凭证的尾部通常会烙印公章。
每个中国人一生可能需要70多个证件,含15种身份证明。证件中“必需的”有30到40个。将这些证件按时间顺序铺开,那就是一个天朝子民的一生——持准生证许可落地,以户籍证明入籍,以身份证认证身份,持结婚证以合法同居,最终以死亡证明注销。
2.数字证书的概念
数字证书就是互联网通讯中 标志通讯各方 身份信息的一串数字,提供了一种在 Internet 上验证通信 实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构—— CA机构(CA = Certificate Authority),又称为数字证书授权中心(数字证书认证机构)颁发(发行)的,人们可以在网上用它来识别对方的身份。
- 数字证书是一个经 CA 数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及 CA 的数字签名。
- 数字证书还有一个重要的特征就是时效性:只在特定的时间段内有效。
数字证书中的公开密钥(公钥)相当于公章。
证书的信任链条是环环相扣的,根证书就是一开始就被信任的证书,是信任链的起始点。
在天朝子民的一生中,户籍证明可理解为等效的根证书:有了户籍证明,才能办理身份证;有了上流的身份证,才能办理下游居住证、结婚证、计划生育证、驾驶执照等认证。
3.根证书的概念
根证书是被严格限制和确认的,根证书的颁发者被称之为 Root Certificate Authority(Root CA)。
某一认证领域内的根证书是 CA 认证中心给自己颁发的证书(自行签名),安装根证书意味着对这个 CA 认证中心的信任。
那么由谁来保证信任链起点的安全呢?
现代网络都会内置一份可信的根证书列表(Firefox 的根证书列表独立于操作系统之外)。
所谓“可信的根证书列表”是指操作系统开发商通过严格地审核,将安全可靠、可被信任的 CA 机构纳入白名单,并将这些权威可信 CA 的根证书预安装到操作系统中。
》在 Windows Internet Explorer 中,通过菜单【工具 | Internet 选项 | 内容 | 证书】可以查看受信任的根证书颁发机构(或中间证书颁发机构):
具体看这篇文章:
http://blog.csdn.net/phunxm/article/details/42685597