OK,有日子没写iOS开发的相关文章啦,主要是最近的精力都没在这上面,不过既然产品已经快要出来了,就有必要了解一下各种证书啥的(众所周知iOS的一堆证书可是很让人头大呀),最近确实被这个搞得头大,然后就决定参考网上的一些资料,进行一下整理,留作一个备份。

内容参考自:苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程

理解Certificate、App Id、Identifiers 和 Provisioning Profile

在我们平常的开发过程中,可以使用模拟器进行调试,也可以直接使用真机测试,真机测试的话,证书的申请也是相对容易的多,但是当我们要实际打包发布程序到App Store时,那个证书真叫一个头疼。

首先,我们打开https://developer.apple.com/account/ios/profile/profileList.action,看下左边:

可以看到有这么几个选项。其中,Devices指的是团队(公司账号是可以以Team的形式添加多个成员的)中的设备,每个开发者账号(不论公司还是个人)可以关联100台设备,可以通过在苹果开发者控制台中添加,也可以通过Xcode直接添加设备。

然后,我们今天的重点目标是各类的证书啊、App ID啊还有Provisioning Profile啥的,所以重点理解一下这几个。

Certificate(证书)

证书指的是由苹果颁发(先交钱后发货的说)给你的证明你有权利进行iOS开发(不买证书你就只能用模拟器的说)并且可以将你开发的应用上传到App Store(么有证书估计只能自己做越狱开发)的一个凭证,表示你是一个开发者,就跟护照啊、身份证啊啥的一样。一个开发者账号只有一套,这个套装里呢包含两个证书,一个是Development证书,也就是所谓的开发证书,凭借这个证书你可以进行开发和真机调试(么有这个就只能用模拟器啦);另一个是Distribution证书,也叫Production证书,即所谓的分发证书或者说生产证书。其中呢,Development证书可以制作多个副本分发到多台设备,但是Distribution证书只能有一个,不能制作副本分发到多台电脑。
 
下面大致介绍一下证书的种类以及分别包含的子分类啥的:
  • Development

    • App Development (1年):用来开发和真机调试应用程序。
    • Push Development (1年):用来调试Apple Push Notification
  • Production
    • In-House and Ad Hoc (3年):用来发布In-House和AdHoc的应用程序。

    • App Store :用来发布提交App Store的应用程序。
    • MDM CSR
    • Push Production (1年):用来在发布版本中使用Apple Push Notification。
    • Pass Type ID Certificate
    • Website Push ID Certificate

    需要注意的是:

 
在我们申请添加一个Certificate之前,需要先申请一个Certificate Signing Request(CSR)文件,这个过程呢,实际上是生成了一对公钥和私钥,保存在我们电脑上的钥匙串中。代码的签名也就是使用这种基于非对称密钥的加密方式,用私钥进行签名,用公钥进行验证。如下图:
我们的钥匙串中存储着相关的公钥和私钥,而证书里则包含了公钥。我们只能使用私钥来进行签名,如果不小心把私钥弄丢了,那么就表示这个证书基本上已经被咔嚓了,不要怕不要慌,你只是不能签名了而已,解决的办法就是revoke掉已经咔嚓了的证书,再重新申请一个,不过由此带来的麻烦可也是不少,所以可见备份的重要性啊,在申请完证书的时候,最好导出并且保存好你的私钥。这么做的另一个好处是当你需要跟其他人共享证书时(尤其是手头儿银子不多的个人开发者),只需要把私钥发给他人就好。当你用自己的私钥对代码进行签名后,苹果就可以用证书中的公钥来进行验证,确保真的是你对代码进行签名了,一来防止冒名顶替,二来确保代码的完整性。
 

App ID

App ID的主要用途是标识一个或者一组App,App ID应该是和Xcode中的Bundle ID是一致的或者说,可以匹配的。App ID有以下两种:
  • Explicit App ID:唯一的App ID,这种类型的App ID只能用来标识一个应用,例如,com.aiscot.whatever,用来标识Bundle ID为com.aiscot.whatever的应用程序,其他的不行。
  • Wildcard App ID:通配符App ID,这种类型的App ID用来标识一组应用程序,例如,com.aiscot.*可以用来标识Bundle ID为com.aiscot.whatever1和com.aiscot.biteme1等所有Bundle ID以com.aiscot开头的应用程序

每次创建一个新的App ID,我们可以设置该App ID所使用的App Services,比如有的使用Game Center,有的不使用,需要注意的是如果你要使用推送服务,那么你要新建的这个新的App ID必须是Explicit类型的App ID,这样儿,苹果的Apns才能识别到唯一的一个应用从而进行推送提醒,而不会出现所谓“一呼百应”的现象,下面是目前的一些可选服务和相对应的配置要求:

配置的时候,一定仔细瞅瞅哈,搞错了不要打我~\(≧▽≦)/~啦啦啦

Identifiers

Identifiers是标识符的意思,相当于身份证吧,用于创建以下三个:
App IDs
Pass Type IDs
Website Push IDs
其中,App ID是应用的唯一标识符,每个应用的App ID是不一样的。

Provisioning Profile

Provisioning Profile是配置文件,一个Provisioning Profile文件包含了刚刚我们上面讲的所有的内容:证书、App ID、设备。

试想一下,如果我们要打包或者在真机上运行一个应用程序,我们首先需要证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且验证Bundle ID是否与其一致;再次,如果是真机调试,需要确认这台设备能否用来运行程序。而Provisioning Profile就把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们只要在不同的情况下选择不同的profile文件就可以了。而且这个Provisioning Profile文件会在打包时嵌入.ipa的包里。

例如,如下图所示,一个用于Development的Provisioning Profile中包含了该Provisioning Profile对应的App ID,可使用的证书和设备。这意味着使用这个Provisioning Profile打包程序必须拥有相应的证书,并且是将App ID对应的程序运行到Devices中包含的设备上去。

如上所述,在一台设备上运行应用程序的过程如下:
 
与证书一样,Provisioning Profile也分为Development和Distribution两种:

(注:前面提到不同账户类型所能创建的证书种类不同,显然Profile文件的种类是和你所能创建的证书种类相关的)

Development (1年)
Distribution (1年)
In House
Ad Hoc
App Store
In House 与Ad Hoc的不同之处在于:In House没有设备数量限制,而Ad Hoc是用来测试用的,Ad Hoc的包只能运行在该账户内已登记的可用设备上,显然是有最多100个设备的数量限制。所以这两种Provisioning Profile文件的区别就在于其中的设备限制不一样而已,而他们所使用的Certificate是相同的。

 
 
证书的大概讲解就先到这里,我先出门剪个头发去,晚上把开发和发布流程整理一下。
 
2015年1月31日,EricTang 记
 
from :http://blog.csdn.net/jeepxiaozi/article/details/43309217

【转】 iOS开发之打包上传到App Store——(一)各种证书的理解的更多相关文章

  1. app上传到app Store常见问题

    一.首先看一下提交界面出现的问题(能成功打包成.ipa) 产生问题的原因如下:由于工程中含有sub project,而sub project中有private或public的文件导致的.这样的应用往往 ...

  2. iOS开发系列-文件上传

    概述 Http协议对文件上传协议要求的 1. 必须设置请求头Content-Type为multipart/form-data.在iOS中后面需要跟上分隔符比如:boundary=----WebKitF ...

  3. Fastlane- app自动编译、打包多个版本、上传到app store

    Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包.发布等工作,可以节省大量的时间. Github:https://github.com/fastlane/fa ...

  4. IOS上传到App Store出现证书未安装问题

    今天在提交自己的APP到苹果商店去审核的时候,编译成功后.upload过程中,提示 XXX Select the certificates you wish to include in this pr ...

  5. app上传到App Store的快捷方法及步骤

    跳过证书的申请及配置概要文件的设置, 现在根据已有的配置概要文件及发布证书开始: 1.先在Xcode上的PROJECT和TARGETS->Build Setting->Code Signi ...

  6. 《iOS开发实战 从入门到上架App Store(第2版)》书籍目录

    第1章 开发准备 1.1 iOS 10新特性简述 1.1.1 新增触觉反馈编程接口 1.1.2 SiriKit框架的开放 1.1.3 引入Messages App 1.1.4 通知框架的整合与扩展 1 ...

  7. ipa上传到APP store

    原地址:http://blog.csdn.net/akun1103/article/details/8632651 在itunes中创建程序 该部分内容继续以雪豹系统为例 打开https://itun ...

  8. iOS开发从申请账号到上线APP Store步骤

    1.developer.apple.com 申请开发者账号 2.根据API Cloud创建证书: http://docs.apicloud.com/Dev-Guide/iOS-License-Appl ...

  9. iOS开发 点击跳转到App Store 或者 点击按钮去评价

    //跳转到应用页面 NSString *str = [NSString stringWithFormat:@"http://itunes.apple.com/us/app/id%d" ...

随机推荐

  1. vim使用详解

    1 插入类命令 i               // 在当前字符前插入 I               // 在当前行首插入 a               // 在当前字符后写入 A         ...

  2. mysql 连接数的最大数

    mysql默认最大连接数是100,增加加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini(windows) 或 my.cnf(linux环境)查找 ...

  3. hadoop 1 testcase运行方法

       转入hadoop2.0后,逐渐忘记了之前做testcase运行的方法,记录一下:    ant -Dtestcase=Test***    如果只运行core包得testcase可以    an ...

  4. 模拟登陆115网盘(MFC版)

    [cpp] view plain copy // 模拟登陆115网盘 #include <afxinet.h> // 包含相关的头文件 /* 用抓包工具抓包可得到需要提交的数据,然后模拟提 ...

  5. swift:用UITabBarController、UINavigationController、模态窗口简单的搭建一个QQ界面

    搭建一个QQ界面其实是一个很简单的实现,需要几种切换视图的控制器组合一起使用,即导航控制器.标签栏控制器.模态窗口.其中,将标签栏控制器设置为window的rootViewController,因为Q ...

  6. javascript library

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  7. c#对文件进行MD5加密校验

    public static string GetFileMd5Hash(string strFileFullPath) { // Create a new instance of the MD5Cry ...

  8. 使用ExtJs实现文件下载

    文件下载,是不可以直接通过Ext.Ajax.Request来实现的.一般的,可以通过创建一个隐藏的form表单来实现.具体代码以及代码注释如下: if (!Ext.fly('downForm')){ ...

  9. Android之开发杂记(一)

    1.cygwin环境变量设置 可在Cygwin.bat 中设置 set NDK_ROOT=P:/android/android-ndk-r8e 或者在home\Administrator\.bash_ ...

  10. Java实体书写规范

    ** * 用户角色表 */ public class BaseUserRole implements Serializable { private static final long serialVe ...