阐明iOS证书和provision文件

译:阐明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。

写的这些能在官方文档之外帮助到我,我也希望能帮助到其他人,我希望没有谬误,如果有任何问题,请留言,我将解决它。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
# Resign ipa重签名(resign),只需一个证书的p12和一个mobileprovision文件就可以实现ipa的重签名 ## (1)使用规则 ### 1.将Resign.sh与你的mobileprovision文件和ipa文件放在同一个文件夹内。 ### 2.打开命令行,复制 chmod +x ,再敲一个空格,再将Resign.sh拖入命令行里面,回车。 ### 3.继续将Resign.sh拖入命令行内,回车,将会出现证书选择项,选择与你mobileprovision文件相匹配的证书,回车。 ### 4.等待数秒钟(视你的ipa资源文件的多少而定)。最后在output文件中就可以找到重签名成功地ipa。 ### 5.安装,完美! !_ ! ## (2)工程配置选项 ### 1.打开Resign.sh 在头部有: 1).hiddenWorkspace:是否隐藏工作目录,默认设置1为隐藏。 2).Debug:测试模式;功能有:debug模式不会删除工作目录,也不会隐藏工作目录。 3).日志文件:在Resign.sh同一目录下地log.txt,里面有详细的日志输出。 ## (3)错误提示 ### 1."该文件夹中包含多个ipa,请只放置一个需重签名的ipa":文件夹内没放或者放了多个ipa文件,导致无法读取ipa文件;解决办法:只留一个需重签名的ipa文件。 ### 2."该文件夹中包含多个provisitionFile,请只放置一个需重签名的provisitionFile":同上 ### 3."XX文件不存在":该文件没有在Resign.sh同一目录下。 ### 4."Entitlements处理失败":请前往log日志里面查看原因。 ### 5."所选证书provisionfile的group不匹配":请检查证书provisionfile是否匹配。 ### 6."XX解压ipa失败":请确定ipa文件是否有损坏或者是否为ipa文件。 ### 7."XX拷贝失败":请确认该文件是否在Resign.sh同一目录下。 ### 8."修改info.plist失败":请确认文件目录是否有改变。 ### 9."签名失败":同第4点。 ### 10."验证签名完整性失败":请开启debug模式再次运行查看Payload文件是否存在。 注意: 部分ipa含screenShare可能会导致重签后无法安装, 可以删除screenShare 或者从ipa 里删了screenShare screenshare.appex 再执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值