(译)iOS Code Signing: 解惑
子龙山人
Learning,Sharing,Improving!
(译)iOS Code Signing: 解惑
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!
原文链接地址:http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood
注:本文由翻译团队成员skingTree翻译。
教程截图:
下面是一篇有澳洲墨尔本的一名全职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。
(译)iOS Code Signing: 解惑的更多相关文章
- iOS Code Signing: 解惑详解
iPhone开发的代码签名 代码签名确保代码的真实以及明确识别代码的来源.在代码运行在一个开发系统以前,以及在代码提交到Apple发布以前,Apple要求所有的的应用程序都必须进行数字签名.另外,Ap ...
- Fix the iOS code signing issue when using Jenkins
This week I setup the Jenkins on my Mac and try to build iOS applications. unfortunately I got the c ...
- iOS Provisioning Profile(Certificate)与Code Signing详解
引言 关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做 iOS 开发的同学没少被折腾.对于一个 iOS ...
- 【转】iOS Provisioning Profile(Certificate)与Code Signing详解 -- 待看
原文网址:http://blog.sina.com.cn/s/blog_82c8198f0102vy4j.html 引言 关于开发证书配置(Certificates & Identifiers ...
- 【转】 iOS Provisioning Profile(Certificate)与Code Signing详解
原文:http://blog.csdn.net/phunxm/article/details/42685597 引言 关于开发证书配置(Certificates & Identifiers & ...
- [转载]iOS Provisioning Profile(Certificate)与Code Signing详解
原文:http://blog.csdn.net/phunxm/article/details/42685597 引言 关于开发证书配置(Certificates & Identifiers & ...
- CodeSign error: code signing is required for product type Application in SDK iOS
在真机测试的时候往往会突然出现这样一个错误,code signing is required for product type 'Application' in SDK 'iOS 7.0' ,就是说 ...
- [BEROR]CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 8.1'
解决方法: 选择project->Build Settings -> Code Signing -> Code Signing Identity -> Debug -> ...
- Code signing is required for product type 'Application' in SDK 'iOS 11.4'
查看链接: https://blog.csdn.net/Fantasy_Jun/article/details/78082359 处理方法: 将code signing identity设置为iOS ...
随机推荐
- 四舍五入PK银行四舍五入
描述 在实际开发中decimal.Round(1.23525,4)!=1.2353实际是1.2352,而decimal.Round(1.23535,4)==1.2354 说明 四舍五入:当舍去位的数值 ...
- VB.NET 小程序 2
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...
- MVC datetime? & datetime 设置格式
设置datetime的格式,直接有方法重载进行,即使数据为datetime?格式 设置起始时间在配置的时候添加设置 $('#closeTime').datetimepicker({ language: ...
- 【转】PS学堂之一:展示一下自己做的圆形印章
共分七个步骤: 1.点击文件--新建,新建一个500×500像素,背景为透明的文件,选择RGB颜色. 2.把前景色和文字颜色设置为正红(R为255,G和B为0). 3.在视图下拉菜单中选择标尺,将横. ...
- html背景自动移动
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- EL函数
EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法. •示例:${prefix:method(params)} •在EL表达式中调用的只能是Java类的静态方法. •这个Java类的静态 ...
- Part 11 string functions in sql server
Built in string functions in sql server 2008 LEFT, RIGHT, CHARINDEX and SUBSTRING functions in sql s ...
- vpn连接成功后,本地无法连接外网
把在远程网络上使用默认网关前面的对勾取消掉,确定就ok啦...
- 推荐最近使用的一个APP
最近使用一个APP叫做得到,觉得很不错,将一些很好的思想提炼出来,然后语音表达,放松眼睛,聆听收获.
- OC9_代理正向传值
// // ProtectedDeleagate.h // OC9_代理正向传值 // // Created by zhangxueming on 15/6/24. // Copyright (c) ...