前提

众所周知,开发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. 开发证书用于开发和调试应用程序,可用于联机调试。
  2. 生产证书用来发布应用程序。

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。
  2. 公钥(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来唯一标识。
  2. 设备的UDID可通过iTunes->Summary或者Xcode->Window->Devices获取。
  3. 开发描述文件(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。
  2. Provisioning Profile决定Xcode用哪个证书(公钥)/私钥组合(Key Pair/Signing Identity)来签名应用程序(Signing Product),将在应用程序打包时嵌入到.ipa包里。
  3. Provisioning Profile把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用。这样,只要在不同的情况下选择不同的Provisioning Profile文件就可以了。
  4. Provisioning Profile也分为Development和Distribution两类,有效期同Certificate一样。Development版本的ProvisioningProfile用于开发调试,Distribution版本的ProvisioningProfile主要用于提交App Store审核,其不指定开发测试的Devices。
  5. xcode开发时,需在XcodeTarget->Build Settings->Code Signing->Provisioning Profile下配置对应的描述文件(Provisioning Profiles),然后在Code Signing Identity下拉可选择Identities from Profile "..."(即Provisioning Profile中包含的Certificates)。
  6. 在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
  • 生产证书配置文件与之类似,不再赘述。

 

iOS开发证书与配置文件的使用的更多相关文章

  1. iOS开发证书和配置文件的使用

    提示:之前只是根据网上的流程完成了iOS项目的发布过程,对于证书和配置文件仍是一头雾水,这里参照别人的文章,简单了解一下,毕竟以后用的着. 这里有几个问题: 什么是iOS证书,它是如何与app应用关联 ...

  2. iOS监听模式系列之iOS开发证书、秘钥

    补充--iOS开发证书.秘钥 iOS开发过程中如果需要进行真机调试.发布需要注册申请很多证书,对于初学者往往迷惑不解,再加上今天的文章中会牵扯到一些特殊配置,这里就简单的对iOS开发的常用证书和秘钥等 ...

  3. iOS 开发 证书总结 开发证书和生产证书的区别

    IOS开发 证书总结 开发者证书   ------>>  开发证书是你在真机推送时 用得, 生产证书是app 上架之后 推送给用户用的 首先你必须获得apple开发者证书,上图这个文件就是 ...

  4. IOS开发证书变成“此证书的签发者无效”解决方法

    IOS开发证书全部变成无效,如下图  打包提示错误  解决方法: 1. 下载https://developer.apple.com/certificationauthority/AppleWWDRCA ...

  5. iOS开发证书都显示“此证书的签发者无效”,更新WWDR Certificate证书后还是显示无效

    1.首先iOS开发证书显示"此证书的签发者无效".是因为WWDR Certificate证书过期导致的,须要更新WWDR Certificate证书! 1)下载最新WWDR Cer ...

  6. 【转】ios开发证书,描述文件,bundle ID的关系

    ios开发证书,描述文件,bundle ID的关系   苹果为了控制应用的开发与发布流程,制定了一套非常复杂的机制.这里面的关键词有:个人开发者账号,企业开发者账号,bundle ID,开发证书,发布 ...

  7. 如何使用iOS 开发证书 和 Profile 文件

    如果你想在 iOS 设备(iPhone/iPad/iTouch)上调试, 需要有 iOS 开发证书和 Profile 文件. 在你拿到这两个文件之后,该如何使用呢? 证书使用说明: 1.  iOS 开 ...

  8. ios开发证书,描述文件,bundle ID的关系

    苹果为了控制应用的开发与发布流程,制定了一套非常复杂的机制.这里面的关键词有:个人开发者账号,企业开发者账号,bundle ID,开发证书,发布证书(又叫"生产证书"),开发描述文 ...

  9. iOS开发证书那点事儿

    iOS开发是用Xcode作为开发工具,Xcode在安装之后就自带了模拟器(Simulator).模拟器是个好工具,它对用户没有任何要求,但是我们必须牢记一件事:开发出来的App最终是要在真机上执行,没 ...

随机推荐

  1. MySQL优化Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available

    //查看所有进程 show processlist; //查询是否锁表 show OPEN TABLES where In_use > 0; //查看被锁住的 SELECT * FROM INF ...

  2. Nginx中间件使用心得(三)

    一.Nginx搭建系统需求 1.系统硬件:CPU >= 2Core,内存 >= 256M      2.自行搭建服务器(Linux操作系统) (1) 使用vmWare虚拟服务器 (2)使用 ...

  3. HDU 2089 不要62 (递推+暴力或者数位DP)

    题意:中文题. 析:暴力先从1到1000000,然后输出就好了. 代码如下: #include <iostream> #include <cstdio> #include &l ...

  4. python 取整itertools

    #coding:utf-8 import sys import itertools def MaxString(n,nums): list1 = nums list2 = [] for i in ra ...

  5. MapGIS Mobile开发

    1. 先将Android开发环境配置好(包括Java + Eclipse + Android SDK) 2. 加载API类库(运行MapGIS 10 AndroidSDK.exe可以加载Mobile框 ...

  6. Codeforces807 C. Success Rate 2017-05-08 23:27 91人阅读 评论(0) 收藏

    C. Success Rate time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  7. HDU6023 Automatic Judge 2017-05-07 18:30 73人阅读 评论(0) 收藏

    Automatic Judge Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  8. 重复 桂林电子科技大学第三届ACM程序设计竞赛

    题目链接:https://ac.nowcoder.com/acm/contest/558/B import java.util.HashSet; import java.util.Scanner; p ...

  9. jquery ui widgets-datepicker

    jquery ui的用法就不在此讲述,直接进入jquery ui的窗体小部件(widgets)——datepicker. 相信很多像我这样子的菜鸟少年,如果同一个页面上有两个input文本输入框是用来 ...

  10. [LeetCode 题解] Spiral Matrix

    前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 题目链接 54. Spiral Matrix ...