iOS 证书与签名 解惑详解

iOS 证书与签名 解惑详解

分类: iPhone2012-06-06 19:57 9426人阅读 评论(1) 收藏 举报

iosxcodecryptographyappleiphone测试

目录(?)[+]

教程截图:

下面是一篇有澳洲墨尔本的一名全职iOS开发者提供的文章。他在论坛上是一个很摩登的年轻人 – Adam Eberbach。

  ·Bundle identifier

  ·provisioning profiles

  ·App ID

  ·certificate signing request

  对于新手,的确很难一口气搞清楚这些东东到底有什么区别。

  下面我们来揭开它们的神秘面纱,在读完这篇文章后,你应该可以把这些东西联系起来,你能够理解它们是怎么工作,并能够顺利地在device上运行你的应用了。

  当然,这里假设你已经是一个iOS开发者,拥有IDP,并已经有一定的xcode和iOS开发经验了。如果你只是刚刚开始学习iOS,你可以先看看其它入门教程。

  好吧,我们开始了。

它们有多重要?

  Code signing 对你来说,最主要的意义就是它能让你的App在设备上运行。不管是你自己的设备,甲方客户的,还是在App store上购买你的消费者。

  如果没有code signing,你只可以在模拟器上,或者一台越狱过的机器上运行你的应用----当然,仅仅如此是不能满足我们的。

  模拟器的测试仅仅是一种初步测试,模拟器不能替代真机调试,因为:

·真正的设备会通常比模拟器慢

  模拟器使用的是你的MAC机上的处理器,而一台真正的iphone可远远没有这种条件。所以如果你不在设备上真正运行,你可能就会忽略实际的性能问题。

  比如你新建一个ViewBased应用,然后在viewDidLoad里面加入下列代码:

int count =200000;
NSMutableArray * array = [NSMutableArray arrayWithCapacity:count];
for (int i =0; i < count; ++i) {
    [array addObject:[NSString stringWithFormat:@"%d", i]];
} 

上面这段代码在模拟器上可能1-2秒就能运行完,但是在真机上面(比如iphone 3GS),大约要花7秒左右的时间。

·设备的内存少很多

  同理的,模拟器使用你MAC上的内存,而一台真正的iphone的内存少得多。

  特别是游戏,通常会使用大量的图片,占用大量的内存。在老一点型号的机器上,一个纹理图片的大小上限是24MB,也就是1024X1024的8bit纹理图。

  内存耗尽绝对是你不想见到的,因为占用的内存超过一定范围,OS会强行退出你的app,对用户来说,就认为是你的app崩溃了。

·有些API只在设备上有效

  譬如In-App purchase的API,或者Instrument中的Core Animation。这些都要在真机上测试出来。(可能以后版本的iOS或者xcode能够支持,但毕竟真机测试是一种保障)

  总的来说,你没有在真机上测试过,等于你没有真的测试完。

·(译者注:一些视觉上的效果在模拟器上看到的可能会与真机不一致)

  在Xcode中有一些懒人的方法:

  在organizer的界面中,选中devices 右键Developer Profile,你可以看到这样一个菜单。

  里面有大部分这篇文章将要讲到的内容。

  这里你可以sign in你的开发者账号,自动登记你的app并运行到你的device上。

  当然,如果这样总是好用的话,这篇文章就没有意义了。

  作为一个开发者,你应该知道更多。

Public and Private Keys 公钥私钥

  在继续剖析之前,我们先简单地解析公钥私钥。

  这世上有两种加密方法:symmetric cryptography 对称密码和 asymmetric cryptography非对称密码。

  对于对称密码,只有一种key。譬如你有一个密钥,以及对应的一个加密过的信息。

  那只有知道密钥的人可以解读这个信息。

  对于非对称密码,有两个key – 公钥和私钥。

  譬如你用某个私钥加密一些信息,别人收到这个信息后可以通过那个私钥对应的公钥来加密。这样他们就可以肯定,这个信息是从你那里来的(至少是你加密的)。

  这个私钥就相当于一个“签名”。 (你加的密,就是你签的字)

  而这个,就是在iOS中code signing背后的原理。

Code Signing Objects

  与Code Signing有关的东西有 :

  Provisioning Profiles,App IDs,UDIDs …

  在这一节,我们会一个一个地解说。

  我用Core Data绘制了一个图表,用来描述这些对象之间的关系。

  这是针对开发人员的 (Development Profile),发布人员的图会有小小区别。

私钥 Private Key:

  在Mac OS X 以后,key由一个叫做 Keychain的app来管理。 你可以在 Application\Utilities 中找到。

运行Keychain,你可以看到在你的名下有哪些公钥和私钥。类似这样的:

(这是私隐,要加码的)

  如果你没有看到任何key的列表,不用担心。在你第一次使用认证的时候,Keychain会帮你创建。

  在这里列出的key是你的provisioning或者code signing的基础。

  你必须有key才能sign code或者在App store中发布你的app。

  如果key丢失了?

  你必须把整个流程重新做一次 – 因为没有key,你的认证不再有效,你的provisioning profile只会生成error。你会浪费很多时间,所以,好好保管它。

  如果你没有备份过,我建议你马上把它export出来,通过File\Export Items ,保存在一个安全的地方,例如一个很小的分区中。或者通过你的Mobile Me账号来同步保存。

有多个Key?

  如果你在不同的Mac机上创建过account,你将会有多个key。

  这样会带来一个问题,在机器A上生成的认证,在没有私钥的机器B上会失效。

  所以,你可以把你所有的key复制到你所有的Mac机上。(这样就不用烦了)

  或者,我更建议只用一个Key。

UDID

  UDID (Unique Device Identifier)是区分物理设备的唯一标识。

  所有你的iPhone肯定有一个与众不同的UDID,包括你的iPad等等。

  通常,UDID会是一个40位十六进制字符串。

  也就是下图的identifier:

  如果App不是从app store上来,你的代码需要有UDID的信息才能运行。

  怎么知道你拥有的设备的UDID?有几个方法。

  1 如果你的设备连到Xcode的机器上,你可以在Organizer中看到UDID。

  2 没有xcode的朋友也可以,在iTunes的 Summary界面,有serial number(序列号)的信息,点击可以看到。

  3 这是最简单的方法,在App Store中下载一个Ad Hoc Helper吧。

Certificate 认证

  认证,就是你的个人开发者认证,或者更华丽地说:“Apple Worldwide Developer Relations Certification Authority Certificate”(这不翻译了),

  这个本质上就是一些代表着信任-授权的数据而已。

  获取一个认证,你需要子啊Keychain Access中生成一个 Certificate Signing Request,并把它发给Apple。这会创建一对 公钥-私钥(如果还没有的话)。

  Apple收到后会验证信息,然后给你创建一个认证。

App ID

  在Xcode4中创建一个项目,你要提供 Product Name 和 Company Identifier的信息。

  Product Name,就是你的app的一个较短的名称。

  Company identifier,通常会是一个反转的DNS串,例如:com.mycompanyname

  这两者合起来,就似乎Bundle Identifier。你会在Info.plist中找到。

  对于每一个你要发布的app,你需要到iTunes Developer Center中注册你的App ID。如下图。

  这个需要与你在Info.plist中设置的保持一致。

Provisioning Profile

  把前面讲到的东西合起来:

  ·App ID (app的唯一标识)

  ·UDID (在某台设备上运行的唯一标识)

  ·Certificate (开发者认证)

  就是所谓的Provisioning Profile。

  Provisioning Profile 通过xcode或者itunes导入到device中,或者打包到一个包含app和profile的.ipa文件中。

  你可以在iOS Provisioning Portal 中创建你的Provisioning Profile。

  新建一个,有一下几个步骤:

  ·为profile命名,以后你会在xcode的organizer,Buid Settings 以及其它一些地方中看到

  ·选择你的certificate

  ·选择你的App ID,要如Info.plist中的一致。

  ·选择要应用到的设备。通常,我都是把我的设备全选的。

个人用途的签名 Signing

  假设你已经有一个准备测试的App,而你有IDP,并且处理好Provisioning Profile的事情了。

  现在你清楚已经知道它们的逻辑了,如果你新加入,下面这些是你要做的:

  1 检查你的公钥私钥,为以后检查方便,起个好名吧。

  2 用Keychain Access来创建你的开发认证。然后下载Apple给你的认证,双击安装,然后你可以在Keychain中看到了吧。

  3 下载“Apple Worldwide Developer Relations Certification Authority Certificate”(WWDR)也是双击安装,也可以到Keychain中看到。

  4 检查你项目的Bundle ID,到Provisioning Portal中创建一个一致的App ID。

  5 在Provisioning Portal中加入你想要的UDID。(全部加上好了)

  6 针对你的Certificate创建Provisioning Profile, 指定你的app ID 和UDID。

  7 下载刚刚创建的Profile,拖到你的xcode Organizer中。

  然后,你就可以sign你的project,并让它们在你的device上运行了。

  在Target – Build Settings ,往下滚动到 Code Signing一节。

  试试编辑一下Debug schema,它适合于团队协作:

  在Automatic ProfileSelector中选择“iPhone Developer”,你会看到你的认证已经自动选上了。

  一切都搞定了,连接你的device,在xcode中选择Debug build,build & run。

  xcode会到你的设备里装上这个provisioning profile,并运行你的App。

原文链接地址:http://www.cnblogs.com/andyque/archive/2011/08/30/2159086.html

时间: 2024-10-13 21:54:54

iOS 证书与签名 解惑详解的相关文章

iOS 证书申请和使用详解(详细版)

对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成员介绍 1.Certification(证书) 证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种: 1)Developer Certification(开发证书) 安装在电脑上提供权限:开发人员通过设备进行真机测试.可以生成副本供多台电脑安装: 2)Distribution Certification(发布证书) 安装在电脑上提供发布

iOS企业证书网页分发全过程详解(图文并茂史无前例的详细哦)

iOS企业证书网页分发全过程详解 苹果的企业级证书发布的应用,是不用设备授权即可直接安装,并且不限设备上限.为了方便分发,苹果有协议实现通过网页链接直接下载安装企业级的应用. 首先需要说明它的原理:基本的原理就是在生成企业证书授权的ipa的同时,要生成一个对应的plist文件,plist文件中会配置ipa的下载地址.版本信息.Bundle ID 等信息,通过网页下载的时候其实下载的是这个plist文件,然后苹果通过自己的协议根据plist文件的配置信息去自动的下载安装app. 这里有个地址用来生

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and Banking”的状态,如下图所示,即可: 这里也是由于Himi疏忽的原因没有说明,这里先给童鞋们带来的麻烦,致以歉意. //——2012-6-25日更新iap恢复 看到很多童鞋说让Himi讲解如何恢复i

iOS中MVC等设计模式详解

iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计模式是被大家广为熟悉和使用的模式,实际上在移动开发中尤其ios开发中,这种模式被发挥到淋漓尽致 MVC设计模式包括三个部分:模型.视图和控制器. 模型包含数据.信息,逻辑,或对象被认为是部分的业务层的iOS应用. 视图包含所有的用户信息的组件,如文本区域,按钮,滑块,被认为是表示层的一个iOS应用.

iOS中UIWebView的使用详解

iOS中UIWebView的使用详解 一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,例如我加载百度的主页:     UIWebView * view = [[UIWebView al

iOS网络编程(六) NSURLSession详解

昨夜浏览Demo的时候,看到别人请求网络数据用的是NSURLSession,当时就在想这里什么,怎么没有用过,引起了我的好奇心,遂去百度-谷歌-官方文档一一查看,有了一定的了解,原来NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的. 查找资料,写了一个小Demo,大家可以看看,有什么不足的地方,可以留言帮我指出来. // // HMTRootViewController.m // // // Created by HMT on 14-6-7.

iOS开发摇动手势实现详解

1.当设备摇动时,系统会算出加速计的值,并告知是否发生了摇动手势.系统只会运动开始和结束时通知你,并不会在运动发生的整个过程中始终向你报告每一次运动.例如,你快速摇动设备三次,那只会收到一个摇动事件. 2,想要实现摇动手势,首先需要使视图控制器成为第一响应者,注意不是单独的控件.成为第一响应者最恰当的时机是在视图出现的时候,而在视图消失的时候释放第一响应者. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -(BOOL)canBecomeFirstRespond

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A

iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCo