iOS开发证书与配置文件的使用

前提

众所周知,开发iOS应用必须要有iOS证书(Certificates)和配置文件(Provisioning Profiles),那么问题来了:

1.什么是iOS证书,它是如何与app应用关联的?
2.iOS开发证书和生产证书有何区别,如何使用的?
3.证书与配置文件(Provisioning Profiles)是什么关系,配置文件在Xcode中如何使用?
4.证书以及配置文件如何申请?
5.什么是Key Pair(公钥/私钥)?如何与证书关联的?
6.签名的作用是什么?

准备工作

如果想要进行iOS开发,首先要具备下面一些条件:
1.首先,要有苹果开发者账号(Apple Developer Account)

  • 只有拥有开发者账号,才能申请开发/发布证书及相应配置文件。
  • 开发者账号分为Individual(个人或公司开发者账号$99)和Company/Organization(企业开发者账号$299)两种类型。

2.若要进行真机调试,必须至少拥有一台装有Mac OS X/Xcode的Mac开发机(iMac or MacBook)

1.登陆iOS Dev Center

如果已经拥有苹果开发者账号,直接登录苹果开发者中心申请开发证书。

  • 登录界面


    F323D07E-B16C-43D6-AF31-7B681C9EFCA7.png
  • 选择“Certificates, Identifiers & Profiles”项进入后显示下面界面,iOS Apps一栏中任意选择一项
EB52CB59-2C2C-4DB8-8F4E-F9F3F1BB28FB.png
  • 进入到如图界面

5F9C1BE5-46DB-4023-AD0E-1F717AEB80AE.png

下面就这四项,分别介绍

2.Certificates(证书),Identifiers(标识符),Devices(设备),Provisioning Profiles(供应配置文件)

为了方便理解,我们把顺序打乱,分别介绍这四项。

2.1. Identifiers

Identifiers即标识符,相当于身份证,用于创建以下三个ID:
App IDs
Pass Type IDs
Website Push IDs

2.1.1.关于App IDs

其中,App ID是应用的唯一标识符:

  • App ID和Xcode中的Bundle Identifier是一致(Explicit)的或匹配(Wildcard)的。
FEDE676C-1DFC-4958-B52E-3B2DF73A35B3.png
  • App ID字符串通常以反域名(reverse-domain-name)格式的Company Identifier(Company ID)作为前缀(Prefix/Seed),一般不超过255个ASCII字符。
  • 用户可在Developer MemberCenter网站上注册(Register)或删除(Delete)已注册的App IDs。

2.1.2.创建App ID

  • 在“ Identifiers”一栏下选择“App IDs”,可查看所有已申请的App IDs,点击右上“+”
1EF8FB56-E265-4B97-A8BE-327841B86814.png
  • 进入Register iOS App ID界面,在“App ID Description”栏下的“Name”项中输入名称


    72E71207-FB31-4BC6-8E03-7EDADE9A82EC.png
  • 在“Explicit App ID”栏下的“Bundle ID”项中输入App ID(反域名格式,如:com.company.test)

  • 这里“Bundle ID”对应Xcode中的“Bundle identifier”

  • Explicit App ID:唯一的App ID,用于唯一标识一个应用程序。例如“com.apple.garageband”这个App ID,用于标识Bundle Identifier为“com.apple.garageband”的App。

  • Wildcard App ID:含有通配符的App ID,用于标识一组应用程序。例如“”(实际上是Application Identifier Prefix)表示所有应用程序;而“com.apple.”可以表示Bundle Identifier以“com.apple.”开头(苹果公司)的所有应用程序。

    378CCEC6-8B91-4CD8-AD2D-027A49B8AA02.png

  • 在“App Services”栏下选择应用要使用到的服务(如要使用推送功能,勾选“Push Notifications”)

423D58C6-2535-4726-98C6-500658BD1141.png
  • 点击continue->点击submit->点击done,申请App IDs完成。点击All IDs可查看申请的ID,点击该ID
453733A7-ABE7-4696-95EE-45168BD75172.png
  • 点击“Edit”可对该App ID进行编辑

2.2. Certificates

2.2.1. 描述

iOS证书是用来证明iOS App内容(executable code)的合法性和完整性的数字证书。对于想安装到真机或发布到AppStore的应用程序(App),只有经过签名验证(Signature Validated)才能确保来源可信,并且保证App内容是完整、未经篡改的。

  • 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。具有时效性,只在特定的时间段内有效。
  • iOS证书分两种:开发证书(Development)生产证书(Production)
  1. 开发证书用于开发和调试应用程序,可用于联机调试。
  1. 生产证书用来发布应用程序。

2.2.2. 生成证书请求文件(CSR)

可以通过Keychain(钥匙串)证书助理从证书颁发机构请求证书。在iOS Dev Center中添加证书(Certificates)时,需要上传改CSR文件。

  • 打开Keychain(钥匙串),点击菜单栏“钥匙串访问”->“证书助理”->“从证书颁发机构请求证书”
64A49729-3C03-4F8F-9910-3E9688235B86.png
  • 填写开发账号邮件和常用名称,勾选“存储到磁盘”。
096ED51F-A832-4DA5-BBB0-FEBA17BE4764.png
  • 继续并选择存储位置后,Keychain将生成一个包含开发者身份信息的CSR(Certificate Signing Request)文件。同时,Keychain Access->Keys(密钥)中增加一对Public/Private Key Pair。
DAB324D4-D886-4097-A54D-1E37038A87A1.png
  1. 私钥(private key)始终保存在Mac OS的Keychain Access中,用于签名(CodeSign)对外发布的App。
  1. 公钥(public key)一般随证书散布出去,对App签名进行校验认证。

2.2.3.申请证书

  • 进入iOS Dev Center,“Certificate”->“All”,点击右上角“+”(也可直接点击“Certificate”下的“Development”或“Production”,直接选择申请开发证书或生产证书),进入如下界面:
F5FABF55-157A-47BB-B3A3-3A0125ABAFDC.png
  • 选择开发证书或者生产证书,这里以生产证书为例,继续
DB782EBE-01C6-48A1-A83E-A6B6CAC5D349.png
  • 选择App ID,即我们在“ Identifiers”中创建的App ID,继续
62F40B5F-4FA9-49C3-B707-46EADD3EC28A.png
  • 这里介绍如何生产证书请求文件,即我们在“2.2.2. 生成证书请求文件(CSR)”中生成的.certSigningRequest文件,这里继续
1A7B633E-B61B-4E63-8EEB-B0D15D0B053E.png
  • 这里需要添加生成的证书请求文件(CSR),“Choose File”选择生成的.certSigningRequest文件,点击“Generate”,如图申请开发证书完成,申请生产证书流程类似,这里不再赘述。
9D2FC3A0-7FC7-43A9-8C3D-B60F108528ED.png
  • 我们可以点击“Download”下载该开发证书,或者在“Certificates”->“All”中查看该证书,并进行下载或删除,如图:
A9690706-6620-4A3D-9B9A-D727EFFC9179.png
  • 下载证书,双击导入Keychain Access,可在Keychain Access->“证书”中查看
屏幕快照 2015-12-06 下午5.40.06.png
  • 展开安装的证书(ios_development.cer)前面的箭头,可以看到其对应的私钥。在KeychainAccess->“密钥”中展开创建CSR时生成的Key Pair中的私钥前面的箭头,可以查看到包含其对应公钥的证书.

2.2.4.导出证书

  • 打开Keychain Access,选择安装成功的证书,右键选择“导出”
1EF53825-B4C4-43B6-A0D8-536FE32AEB81.png
  • 输入名字,默认格式为.p12类型,选择“Save”
72BA1D21-C005-4A7B-81B6-3B8ADC62872D.png
  • 设置密码,点击“OK”
47AF6037-0C4F-4960-9AD8-75C5EE34CA6F.png

2.3. Devices

  1. Device是指运行iOS系统用于开发调试App的设备(即苹果设备)。每台Apple设备使用UDID来唯一标识。
  1. 设备的UDID可通过iTunes->Summary或者Xcode->Window->Devices获取。
  2. 开发描述文件(Provisioning Profiles)必须绑定设备,所以在申请开发描述文件之前,必须要添加调试的设备(已添加可跳过)。

2.3.1.添加调试设备

  • 进入iOS Dev Center,“Devices”下选择“All",可查看所有已添加的设备,点击右上角“+”添加新的调试设备
9A9CA0B2-F320-4F9F-B51A-B0C250FECC63.png
  • 输入“Name”和UDID(可在xcode或者iTunes中查看)后,继续
ADF3D2DB-09B6-42D2-899B-D92D0E6163B5.png
  • 确认信息后,点击注册,完成添加。

2.3. Provisioning Profiles

2.3.1 概念

Provisioning Profile文件包含了上述所有内容:证书App ID设备,后缀名为.mobileprovision。

  1. 一个Provisioning Profile对应一个Explicit App ID或Wildcard App ID。
  1. Provisioning Profile决定Xcode用哪个证书(公钥)/私钥组合(Key Pair/Signing Identity)来签名应用程序(Signing Product),将在应用程序打包时嵌入到.ipa包里。
  2. Provisioning Profile把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用。这样,只要在不同的情况下选择不同的Provisioning Profile文件就可以了。
  3. Provisioning Profile也分为Development和Distribution两类,有效期同Certificate一样。Development版本的ProvisioningProfile用于开发调试,Distribution版本的ProvisioningProfile主要用于提交App Store审核,其不指定开发测试的Devices。
  4. xcode开发时,需在XcodeTarget->Build Settings->Code Signing->Provisioning Profile下配置对应的描述文件(Provisioning Profiles),然后在Code Signing Identity下拉可选择Identities from Profile "..."(即Provisioning Profile中包含的Certificates)。
  5. 在XcodeTarget->Build Settings->Code Signing->Provisioning Profile可选择“Automatic”,xcode会根据该Target的“Bundle identifier”选择默认的配置文件及证书。
3DAD606D-8BDC-4A7E-8644-5A7CF27DF3B4.png

2.3.2. 创建配置文件

  • 打开iOS Dev Center,“Provisioning Profiles”->“All”,点击右上角“+”(也可直接点击“Development”或“Production”)
AC661BDE-DE94-487E-9A71-4C436224CB5D.png
  • 选择开发或发布证书配置文件,这里以开发为例,点击iOS App Development,继续
0AB45E72-821D-4F5C-84F8-CA19E97CC565.png
  • 选择对应的App ID,继续
F0C2D519-CA90-4286-A0AB-3A42DB4EADA0.png
  • 选择要关联的证书,可多选,继续
50725524-699D-400B-B1C0-3C5024774F95.png
  • 选择用于调试安装的设备(最多100台设备),如果是生产证书配置文件,则不会出现该页面(生产证书用于发布,不能进行开发调试),继续看到以下界面
3FD54433-014F-4861-803F-994FFACCC910.png
  • 输入文件名后,点击“Generate”,配置文件创建成功
56C9B53B-666E-4173-8083-D1857EB58CD4.png
  • 可点击“Download”进行下载,或者在“Provisioning Profiles”->“All”查看所有配置文件,并进行下载或删除等操作。
6F158A64-B819-476F-86EC-A4BA6EF1E3D2.png
  • 如图下载到本地的Provisioning Profile,双击自动安装到xcode中,在XcodeTarget->Build Settings->Code Signing->Provisioning Profile中可看到此项。
F5A42FB8-44EB-4A5C-B53C-3F3499CF883D.png
  • 如图,选择此项配置文件,“Code Signing Identity”中会默认显示所关联的证书文件(即创建该配置文件时选择关联的证书,可有多个)
3E6BFDF4-28E2-49DF-A31E-0FF507A1604F.png
  • 生产证书配置文件与之类似,不再赘述。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容