免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!
原文链接地址: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 (inti =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
。
分享到:
相关推荐
标准的DLNA协议,可以实现把手机本地音乐推送到设备播放,可以实现获取设备音乐在本地播放等。
ios-csr:在iOS中生成CSR(证书签名请求)
准备对iOS构建操作进行签名此操作有助于为xcodebuild的archive和exportArchive命令提供必要的证书和置备配置文件。 它可以将提供的演唱证书导入... 默认的signing.ios 。keychainPassword 临时钥匙串的可选密码。 默认
安装 通过运行 pip install -r requirements.txt 您将获得此代码所需的模块。 鼓励使用GPG 2.1 鼓励使用GPG 2.1版(请参见此处的发行说明 )。 如果将OSX与brew一起使用,则可以使用以下命令: ...
关于ios的Code Signing 、Provisioning Profile、 Bundle Identifier之间的联系 如何添加设备,创建应用,创建生产证书、开发证书、推送证书
oauth签名 一个简单的网络应用程序,支持使用OAuth 2.0使用Google帐户登录。 用java和spring boot创建。 不要使用真实的Google帐户登录,请创建假的,因为client_secret被泄露
签名签名 JavaScript库,用于在呈现的... script src =' /path/to/signature-signing.js ' data-signature-signing-url =" http://example.com/path/to/signature/signing.json " > </ script > < script
iOS Code Signing解惑.pdf iPhone上面的现实增强(Augmented Reality)入门教程.pdf OpenGL ES2.0 – Iphone开发指引.pdf OpenGLES2.0 Iphone开发指引:第二部分,纹理贴图.pdf 使用cocos2d和box2d制作滚动背景.pdf ...
浏览器令牌签名 ...构建一个可安装的软件包firefox-token-signing.pkg make 执行 open /Application/Safari.app 视窗 获取源 git clone --recursive https://github.com/open-eid/browser-token-sig
java-xml-签名 这是一个 eclipse 示例项目,在 gpl-3.0 下获得许可。 它展示了如何使用给定的私钥和公钥对签署和验证 xml 文件。 本项目只使用java内部库!
云端签名 用于签署云前端 cookie 的助手
Chrome Native Client插件 注意! 一个新的Web eID项目正在开发中,它将在不久的将来取代Chrome令牌签名。 有关Web eID解决方案的更多信息,请参见。 可从和获得Chrome令牌签名 信息: Firefox 50版本支持Chrome...
• Tour the lifecycle of an Xcode project from inception to App Store including Xcode s new automatic code signing and debugging features • Construct app interfaces with the nib editor, Interface ...
代码签名任务 Azure DevOps的生成任务,使用户能够对程序集和应用程序进行代码签名。 用法 添加一个新任务,从“实用程序”类别中选择“代码签名” ,然后根据需要进行配置。 参数包括: 安全文件:上传到了该证书...
Google第三代TPU硬件架构及工作原理,软件编程模型,对理解TPU架构非常有帮助,非常不错的官方文档
AN12812 Using Code-Signing Tool with Hardware Security Module
证书信息最新更新:30/12/2014 2345.com.cer 序列号: 63 b4 d4 81 05 76 53 2e 1b 10 b9 9d 39 89 4c 78 颁发者:VeriSign Class 3 Code Signing 2010 CA 有效期自: 星期四, 23 五月 2013 年 8:00:00 am 有效期至...
1. IOS app 发布应用详细操作说明;2. outside the store 安装流程;3. Missing ios distribution signing identity…解决方案;4. Your account already has a valid certificate解决方案
Encryption, Code Signing and Memory Protections, Sandboxing, Fuzzing iOS Applications, Exploitation, Return-Oriented Programming, Kernel Debugging and Exploitation, Jailbreaking, Baseband Attacks,...
APNS通知接受客户端 运行于 iOS设备上 查看设备token,接受通知