译:阐明iOS证书和provision文件
许多iOS开发人员都会和你说在iOS开发很困惑的问题之一,将app真正运行在真实的设备(iPhone iPad而不是模拟器),因为所有的这些都会涉及从苹果获得证书,甚至那些知道证书的一般流程的,仍会感觉有些奇怪一切是如何运行的,这将是一个长期的过程,但我希望本文将对你有用。
为了更好的理解我们需要去了解这些的理由,你需要谨记这背后最大的原因:
苹果,只有苹果,只允许硬件设备在有限的时间内(develop id 一年的时间)运行指定的软件
是的,这是一个非常严格的规则,很多人不喜欢它,但是苹果用铁腕强制推行,这条规则强制软件使用密码签名,每一次app启动时,系统将检查app,以确保它被苹果和开发者允许运行,通过设备越狱和软件破解,可以绕过这些,但对大多数人这不是一个好选择。
苹果数字签名
如果只有苹果可以运行软件,那开发者如何测试软件?(这是不可能的)简短的答案是苹果只相信符合苹果利益的app,长的答案很长,可以从以下几点开始:
当你注册成为iOS开发者,苹果允许你去申请一个特别的证书,用来以苹果的方式去签名app或者其他,你通过使用keychain创建一个Certificate Signing Request (CSR),当你从“证书中心请求一个证书”(Request a Certificate from a Certificate Authority) 两件事情发生:
1 首先,keychain 将为你自动创建一个公钥和私钥,在keys的目录下,可以看见它们。这些keys是非常重要的:它们用来告诉苹果你是谁,不要丢失这些文件,除非你想重做这些流程,可以做个备份。
2 最后,keychain使用keys创建一个certSigningRequest文件去苹果公司,这些文件包含了你的名字、email、公钥、并且使用私钥签名,从而Apple确保是你创建的。
现在,你要上传CSR给Apple,Apple将确认一切是否正常,然后发给你一个开发者证书(development certificate),你可以
下载“developer_identity.cer”文件到你的系统,然后拖到keychain中(双击该文件也可以)。这个新的证书将在“My Certificates”目录中显示,双击它,可以查看它的内容:这是一个简单的证书,由Apple发布,说明Apple相信你是谁,将会在签名app时使用到。
Provisioning Files(配置文件)
你的第一完成了,你有了一个来自Apple的说明你是谁的和签名app的证书,就这样么?不,你的iPod/iPhone仍然不知道它是否可以信任你,这里就需要配置文件登场了。
当你创建了配置文件,你在Provision Portal使用上一步苹果颁发给你的证书,关联了iOS设备,结果就是一个用来记录iOS app的过程(即该app是否开启push功能等这些信息)和一个部署到设备所需要的.provision的文件。下载它,并双击安装,Xcode自动将配置文件添加到Organzier.
你可以在一个工程下有数个配置文件,也可以对所有的app使用一个配置文件。如果你创建一个新app,或者继续开发先前的,一个简单方法是对开发使用一个配置文件。最后,你需要创建一个特别配置文件为每个app,因为AppId添加了在Provision Portal比较该app的设置信息(如是否开启push等)。完成这些,你可以设置AppId提交到app store。
编译App并运行
让我们复习一下,有已经有了用来定义你是谁的公钥和私钥,从Apple颁发的证书说明了它知道你谁,配置文件说明了你的项目可以运行在你的设备上,现在是生成执行文件的时候。
我将不在解释设置Xcode或者Mono Touch去编译app,网上有许多教程。我唯一提醒的是你要使用你的这个证书和配置文件设置编译工具。
当你运行编译的app,所做的是创建一个包含所有你的app需要的文件的目录,如果你右键点击最终的app,选择显示目录下的内容,除了所有正常工程文件和资源,你将发现还有两个东西:
1 实际的配置文件,是你已经配置文件的直接拷贝。
2 一个叫“_CodeSignature”的目录,这个很有趣,里面有一个"CodeResources"的文件,这是一个简单的plist文件,包含了该包内所有其他文件的
加密hash值。
当app被安装后,iOS做了很多事情:第一,它确保配置文件(provison file)是由苹果签发的,然后它使用provision key比较每一个真实文件的hash值和在CodeResources下hash值,去确保这些文件从编译开始一直未被该改变,如果有任何问题,app是不会安装的。
最后一次检查发生在当你运行app时,iOS检查app未被改变,你拥有一个与尝试运行app相匹配的配置文件,如果没有,app将crash。
其他部署
Ad-hoc部署工作与上文写的相似,你仍然要注册你的设备,所有的事情都一样。
企业开发有些不一样,当你有一家数千台iPhone使用者的大公司,Apple表现得更喜欢你和信任你多一些,他们给你一个允许你像apple公司一样的重签名的证书,为了所有的iOS设备将自动识别你并且可以运行app,所以你不需要在配置文件里注册设备,除了这一点,其他的都一样。
最终,部署到App Store,像企业部署一样,不需在配置文件里注册设备,不同的是,在从Apple的的的配置文件中的签名不允许你到处运行,你不可以运行app除了在AppStore里,你唯一能做的事就是提交到AppStore等待许可。
当苹果接受到你的App,已经被你签名过并包含配置文件,所以他们知道你是一个提交app的正确的人,并且App是一个应该被许可的,在检查回顾过之后,他们最终用他们自己的可以运行在任何设备的签名重新签名app。
源引:http://www.2cto.com/kf/201310/248734.html