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

作者: 明天不用上课 | 来源:发表于2015-12-06 21:50 被阅读61208次

前提

众所周知,开发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
  • 生产证书配置文件与之类似,不再赘述。

相关文章

网友评论

  • 被偏爱的总有恃无恐:标题中配置文件的使用呢
  • 西叶lv:请问,如果公司多个应用想公用同一个发布证书,是不是每个应用在创建App ID时,需要选择Wildcard App ID通配Bundle???
  • cookov:很详细啊,赞!!!
  • f810dd6f2c3a:个人开发者是应该选择explicit app ID 还是wildcard app ID比较好呢?关于bundle ID起名字有没有什么要求?没有域名和公司名该怎么起名字呢?
  • dd9cd26c06ab:你好,我用自己的没有付费的ID,生产了证书,做真机测试,可是当我用企业级的开发者账户在开发者中心配置推送证书的时候,它说我的bundleID不能用,你知道怎么回事吗?
    dd9cd26c06ab:@404你懂得 xcode7之后,真机测试,不用在开发者中心配置证书
    sonialiu:嗨 你没有付费的id可以生成证书? 我打开页面,提示这个:Your Apple ID must be associated with a paid Apple Developer Program or Apple Developer Enterprise Program to access certain software downloads. You can download Xcode or sign in with a different account. 请问 你是怎么做的?
  • 星零_36cd:现在有一个工具appuploader,,可以实现在windows,linux或mac系统环境下上传ios app应用 ,和生成ios开发证书配置文件。
    星零_36cd:Appuploader官网
    http://www.applicationloader.net
  • 4VZhang:看完瞬间豁然开朗
  • 小代码仔:楼主,讲的很详细,不过我这边有一些奇葩的问题我没有搞明白:我生成一个(包含推送)的开发证书 "A" 时,现在生成对应的描述文件(您上边的 2.3.2 中 “选择要关联的证书,可多选,继续”)这一步找不到我刚刚生成的那个发布证书 “A”。请楼主解答疑惑
  • OCDak:你好,我想请问下,app打包上传后,开发者中心这些证书删除是否有影响,各个证书状态Invalid 和active这两个状态又会有什么影响
  • e4d93d6aae84:选择开发还是生产的时候,那一栏是灰色的,点击不了是怎么回事
  • dkStart:向请教下,一个app可以有多个配置文件吗
    iOS_愛OS:@dkStart 可以有,一个appid 都有可能会有多个配置文件
  • 1d2c9b77769c:您好,我想问一下如果我的app ids里Associated Domains之前没有开启,但现在这个版本的app又要有这个功能,如果我edit了,会影响到现有的生产证书吗?继而影响到app store上的app吗?
    yscGr:@2711981419 thank you
    1d2c9b77769c:@yscGr 放心做吧! 已经测试过了,没有问题。 edit后把证书generate就可以了。
    yscGr:请问你自己测试过你的这个问题么?有没有影响,我也很想知道。如果测试过,请回复我,谢谢
  • 雾霾大哥:app store 上的的证书里面包含添加的uuid 但是 上传蒲公英后 该应用的证书里面没有添加的那个uuid 这个情况是什么
    雾霾大哥:@刀神 你把所有相关的描述文件和p12删除重新点边试试
    刀神:我也是这样 重新配置了pp 文件 再到处的ipa 蒲公英那里的 uuid 还是没有增加
  • afluy:很详细,赞楼主
  • 124f4014a474:在创建Provisioning Profiles的时候看不到apns的certificates是怎么回事啊,我按网上说的另外创建了一个普通的certificates,能看到普通的,看不到apns的certificates
  • 秋雨W:配置文件可以多选关联多个证书?确定?
  • 叶舞清风:苹果开发者账号 == 这个账号是付费账号吧???
    4VZhang:对,肯定要付费才能使用
  • 7a946bf5d2ca:添加的事例为什么是推送的证书,我一个iOS小白的朋友照着你这个弄,要做真机测试结果弄了个推送的证书,有点坑人啊。
    7a946bf5d2ca:@黄立波 hello
    2068e5e51f60:@大博哥 大博哥
  • 丶Destinyxl:您好,我想打包发布到蒲公英平台上,请问证书和配置文件需要选择哪种呢?是开发还是调试?谢谢
    明天不用上课:@LL_Summit 嗯,是的
    丶Destinyxl:@明天不用上课 两个都是吧? 然后在打包的时候选择 ad hot 方式打包就行了吧
    明天不用上课:@LL_Summit 发布的话要使用生产证书

本文标题:iOS开发证书与配置文件的使用

本文链接:https://www.haomeiwen.com/subject/mjpshttx.html