最近需要给iOS开发团队做一次关于iOS开发证书以及代码签名的分享,于是花了点时间把这一块的知识重新学习和整理了一遍,从而有了这篇学习笔记。其中很多一些文字都是从网站或者博客上摘抄过来,为了阅读方便也做了一些调整,说白了我只是做了一些知识的梳理和整合。
该笔记涉及到内容有:开发者账号、签名证书、标识符(Identifiers)、设备(Devices)、APP授权机制、配置文件、ipa文件的签名和安全验证。
开发者账号类型
苹果为iOS开发者提供三种账号类型,如下:
- Apple Developer Program 年费 $99(或¥688) 可以在iOS App Store和Mac App Store上架应用可以以个人(Individual)或者组织(Organization)的名义加入,以组织身份加入需要提供邓白氏编码(DUNS Number),会多出Team Management功能,允许多人协作开发。在发布署名上以组织(Organization)的名义加入可以填写公司或组织信息(比如某某公司、某某工作室),而以个人(Individual)加入只能默认显示注册时填写的个人信息,并且不能修改。
- Apple Developer Enterprise Program年费 $299,用于以InHouse方式发布企业内部应用,不能上架App Store企业证书过期则已经安装的应用无法继续运行。
- iOS Developer University Program
高校计划需要提供高校基本信息,免费提供。苹果为鼓励高校更多的参与到苹果开发者计划中来,特意推出这一项计划,高校计划具有在真机上测试等权限,但不能将App发布到App Store。
证书(Certificates)
什么是证书?证书就是:证明证书拥有者有证书上所说的能力,一个证书要涉及到颁发者、拥有者、证明拥有者有了什么能力。例如,CET-4证书;颁发者:学校,拥有者:自己,证明的能力:英语达到四级水平。苹果开发者证书也是一样,颁发者:自己,拥有者:安装证书的电脑;证明的能力:可以打包某应用程序。
开发者证书能力来源
向Member Center申请证书的过程,其实就是将在本地生成的certSigningRequest
文件提交给苹果,让它进行签名授权的过程。certSigningRequest
这个文件包含以下内容:
- 申请者信息,此信息是用申请者的私钥加密的。
- 申请者公钥,此信息是申请者使用的私钥对应的公钥。
- 摘要算法和公钥加密算法。
当苹果用私钥对其签名(授权)之后,我们便可以获得一个证书文件。拥有该证书后,我们便可以用对应的私钥对APP签名了。当iOS设备拿到APP时便可以通过证书中的公钥来验证APP的正确性,同时iOS设备本身可以验证证书的是否被授权,因为该证书是苹果自己签名的证书。
被苹果签名的证书会随APP一起打包到ipa文件中,并提交到App store中。
当我们获得签名证书之后,还需要一个证书来验证证书是否被正确授权,该证书就是Worldwide Developer Relations Certificate Authority证书。该证书一般都会随Xcode一起安装到我们的电脑中,也可以从Member Center去下载。所以如果没有该证书,开发者将不能使用对应的私钥对APP的签名,因为不能确保证书是否被授权。该证书也就是网上有提到媒介证书(Intermediate Certificate)。
证书的类型
苹果为开发者提供三种证书类型,用来在不同环境下使用,方便开发者的调试和测试。
- 开发证书:平时用来进行真机调试的证书,用该证书签名的APP,只能安装在指定的设备上。
- 测试证书:不可以用来真机调试的证书,但是可以编译到指定的真机上(不可以进行调试)。主要用来提交给测试进行功能的验证,和开发证书的区别在于,它和发布证书类似处于非沙盒坏境。但是用该证书签名的APP无法提交到App store,只能安装在指定设备上。
- 发布证书:不可以用来调试和测试,也不能安装在指定设备上,只能提交到App store。
使用企业(Enterprise)账号下的发布证书签名的APP可以安装到所以设备上,但是不能提交到App store。
标识符(Identifiers)
在Member Center中,Identifiers可以管理App IDs、Pass Type IDs、Website Push IDs、iCloud Containers、App Groups、Merchant IDs、这里主要介绍App IDs。
App ID其实就是一个字符串,用来做APP唯一标识的字符串,App ID是大小写敏感的。一个APP有且只能有一个ID,并且唯一。在Project中称为Bundle ID(但是会有些小差别,Bundle ID不能包含[ * ]号)。在Member Center、Project、iTunes Connect都是需要此ID去标示此App的唯一性。App ID添加之后不能进行修改和删除。
App ID字符的组成和类型