如果是才进入公司进行开发的iOS程序猿来说人难免会对苹果的证书、配置文件,尤其有的需要重头开始的公司来说,最简单的来说真机调试是免不了和这些东西打交道的,有的时候赶时间做完了可能心里也犯嘀咕,本文根据个人经验对Certificates、Identifiers和Profiles做下简单的介绍,不过默认你已有苹果账号,如果你还在学习的路上,将来有一天你也会有的,开始正题吧:
1.登录苹果官网,苹果在WWDC15之后对网站进行了改版,以下是最新的截图:
2.三合一的管理模式:
3.管理iOS Apps,这个就是网上有的时候会看到的图片,隐藏了账号信息;
如果进入了这里就到了文章的重点,接下来就解释这些选项的作用(本文链接:http://www.cnblogs.com/xiaofeixiang,iOS技术交流群:228407086)
Certificates(证书)
证书主要分Development和Production两类,Development证书用来开发和调试应用程序,Production主要用来分发应用程序,不同的种类的证书功能不一样:
Development:
- App Development (1年):用来开发和真机调试应用程序。
- Push Development (1年):用来调试Apple Push Notification
Production:
App Store and Ad Hoc (3年):发布App Store和AdHoc的应用程序;
Apple Push Notification service SSL (Production)(1年):在发布版本中使用Apple Push Notification;
VoIP Services Certificate
Pass Type ID Certificate
Website Push ID Certificate
标注过的证书都用过,未标注本人没有使用过,不敢误人子弟。在Xcode的Code Signing中,可以设置用于为代码签名的证书。
小贴士:
我们申请一个Certificate之前,需要先申请一个Certificate Signing Request (CSR) 文件,如图所示:
这个过程中实际上是生成了一对公钥和私钥,保存在自己的Mac的Keychain中。代码签名正是使用这种基于非对称秘钥的加密方式,用私钥进行签名,用公钥进行验证。图片来源网上,原理大同小异,在自己Mac的keychain的login中存储着相关的公钥和私钥,而证书中包含了公钥。你只能用私钥来进行签名,所以如果没有了私钥,证书也就没有意义。因此在申请完证书时,最好导出并保存好你的私钥。当你的团队有新成员或其他设备需要共享证书时,用同一私钥就可以。私钥保存在自己的Mac中,而苹果生成的Certificate中包含了公钥。当用自己的私钥对代码签名后,苹果就可以用证书中的公钥来进行验证,确保是本人对代码进行了签名,而不是被冒充,确保代码的完整性。
Identifiers(标识)
Identifiers分为六种,App IDs,Pass Type IDs,Website Push IDs,iCloud Containers,App Groups和Merchant IDs,其中App IDs是最常用的,其他的五种没有使用过,重点说下App IDs,App IDs用于标识一个或者一组App,App ID应该是和Xcode中的Bundle ID是一致的或者匹配的。App IDs主要有以下两种:
- Explicit App ID:唯一的App ID,这种App ID用于唯一标识一个应用程序,例如com.cnblogs.xiaofeixiang,标识Bundle ID为com.cnblogs.xiaofeixiang的程序。
- Wildcard App ID:通配符App ID,用于标识一组应用程序。例如*可以表示所有应用程序,而com.cnblogs.*可以表示以com.cnblogs开头的所有应用程序。
每创建一个App ID,我们都可以设置该App ID所使用的APP Services,也就是其所使用的额外服务,如下图所示可以进行勾选:
Devices(设备)
随着苹果帝国的发展,现在设备类型分为Apple TV,Apple Watch,iPad,iPhone和iPod Touch五类。Devices中包含了该账户中所有可用于开发和测试的设备。 每台设备使用UDID来唯一标识。每个账户中的设备数量限制是100个。Disable 一台设备也不会增加名额,只能过了一年之后才能删除,所以如果机器比较多慎用。
Profiles (配置文件)
配置文件,分为两种,一种是Development,另外一种是Distribution,如下图:
Provisioning Profile文件包含了上述的所有内容:证书、App ID、设备,我们先思考两秒,如果没有配置文件我们如何在真机上运行一个应用程序:
①通过证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的。。
②指明它的App ID,并且验证Bundle ID是否与其一致;
③如果是真机调试,需要确认这台设备能否用来运行程序;
Provisioning Profile就把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们只要在不同的情况下选择不同的profile文件,而且这个Provisioning Profile文件会在打包时嵌入.ipa的包里。团队的Provisioning Profile中包含了该Provisioning Profile对应的App ID,可使用的证书和设备,通过Provisioning Profile打包程序拥有与之相应的证书,并且是将App ID对应的程序运行到Devices中包含的设备上去。
苹果官网关于配置文件的介绍:https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/RevisionHistory.html#//apple_ref/doc/uid/TP40013839-CH99-SW1,附赠iOS技术交流群:228407086~
iOS开发-Certificates、Identifiers和Profiles详解的更多相关文章
-
iOS开发--常用技巧 (MJRefresh详解)
iOS开发--常用技巧 (MJRefresh详解) https://github.com/CoderMJLee/MJRefresh 下拉刷新01-默认 self.tableView.head ...
-
iOS开发——多线程OC篇&;多线程详解
多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...
-
iOS开发——屏幕适配篇&;Masonry详解
Masonry详解 前言 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-ip ...
-
iOS开发——UI篇OC&;transform详解
transframe属性详解 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建“基 ...
-
ios开发——实战OC篇&;FMDB详解
FMDB详解 前一篇文章中我们介绍的SQLite的使用,在iOS中原生的SQLite API在使用上相当不友好. 于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...
-
iOS开发——实用技术OC篇&;事件处理详解
事件处理详解 一:事件处理 事件处理常见属性: 事件类型 @property(nonatomic,readonly) UIEventType type; @property(nonatomic ...
-
iOS开发中UIPopoverController的使用详解
这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController ...
-
【转】IOS开发网络篇之──ASIHTTPRequest详解
ASIHTTPRequest 详解, http 请求终结者 版权归旺财勇士所有〜转载需声名〜 原贴地地址:http://wiki.magiche.net/pages/viewpage.action?p ...
-
IOS开发网络篇之──ASIHTTPRequest详解
目录 目录 发起一个同步请求 创建一个异步请求 队列请求 请求队列上下文 ASINetworkQueues, 它的delegate提供更为丰富的功能 取消异步请求 安全的内存回收建议 向服务器端上传数 ...
随机推荐
-
java基础之 序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬 ...
-
java url方法解释
java 的url类中有很多get方法 以下是获取值的意义 // 首先先看一下wikipedia上关于url的一个描述 //Every HTTP URL conforms to the syntax ...
-
Oracle分组排序查询
用sql查询每个分组中amount最大的前两条记录: SELECT *FROM HW trWHERE(SELECT COUNT(*) FROM HW WHERE tr.DEPID=DEPID AND ...
-
2013/11/21工作随笔-PHP开启多进程
今天被问到一个问题,php如何开启多进程才比较稳定. php开启多进程执行一个操作有哪些方法: 首先想到的是使用pcntl的fork 具体可以参考之前的文章:PHP的pcntl多进程 其次想到的方法是 ...
-
hihoCoder #1182 欧拉路·三 (变形)
题意: 写出一个环,环上有2^n个格子,每个格子中的数字是0或1,相连着的n个格子可以组成一个数的二进制,要求给出这2^n个数字的序列,使得组成的2^n个数字全是不同的.(即从0到2^n-1) 思路: ...
-
JAVA —— 数组
import java.util.Arrays; public class Array { public static void main(String[] args){ Array test= ...
-
敏捷开发(十)- Scrum每日例会
本文主要是为了检测你对SCRUM 评估会议的了解和使用程度, 通过本文你可以检测一下 1.你们的SCRUM 没人例会的过程和步骤 2.SCRUM 每日例会的输出结果一.会议目的 ...
-
如何设计相对安全的cookie自动登录系统
很多网站登录的时候,都会有一个"记住我"功能,用户可以在限定时间段内免登录, 比如豆瓣.人人.新浪微博等都有这种设计.这种技术其实就是基于 cookie的自动登录, 用户登录的时候 ...
-
vue引入bootstrap——webpack
想要在vue中引入bootstrap,引入的时候需要按照如下的步骤进行. 1.引入jquery 2.引入bootstrap 阅读本文前,应该能够搭建环境,使用vue-cli进行项目的创建,可以参考 ...
-
理解 async/await 的执行
这是一篇简单的短文章,方便理解. 开局先丢官宣:sec-async-function-definitions 这个链接是对 await 的解释,解释了它的执行. await 的执行意味着(官宣巴拉巴拉 ...