各种iOS名词的意义所在

教程截图:

Learn all about how Code Signing works!

下面是一篇由澳洲墨尔本的一名全职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,你可以看到这样一个菜单。

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

Automatic provisioning with Xcode 4

这里你可以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绘制了一个图表,用来描述这些对象之间的关系。

Objects related to Code Signing

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

私钥 Private Key:

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

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

Keychain Access showing public/private keys

(这是私隐,要加码的)

如果你没有看到任何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:

How to see your device's UDID in XCode Organizer

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

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

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

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

How to find a device's UDID in iTunes

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。如下图。

Finding the Bundle Identifier in your Info.plist

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

Provisioning Profile

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

·App ID (app的唯一标识)

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

·Certificate (开发者认证)

就是所谓的Provisioning Profile。

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

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

Creating a Provisioning Profile in the iOS Provisioning Portal

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

·为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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容